Tôi đang tìm hiểu về DT đại số trong haskell. Những gì tôi muốn làm là tạo ra một ADT mới mà loại "mở rộng" một hiện có. Tôi không thể tìm thấy cách thể hiện những gì tôi muốn, ai đó có thể sugest một mô hình thay thế hoặc sugest một giải pháp. Tôi muốn chúng là những loại riêng biệt, nhưng chỉ sao chép và dán các đường nối như một giải pháp ngớ ngẩn. Mã dưới đây mô tả đúng nhất những gì tôi đang tìm kiếm.Loại dữ liệu đại số của Haskell: "pseudo-extend"
data Power =
Abkhazia |
-- A whole bunch of World powers and semi-powers
Transnistria
deriving (Eq, Show)
data Country =
--Everything in Power |
Netural |
Water
deriving (Eq, Show)
Chỉnh sửa: Tôi nghĩ rằng Nó cần một chút làm rõ ... Tôi muốn để có thể làm được điều này (trong ghci)
let a = Abkhazia :: Country
và không
let a = Power Abkhazia :: Country
Lý do muốn làm điều này thường đến từ một trường OO-y suy nghĩ ;-), nhưng bạn luôn có thể thêm một hàm tạo trong phạm vi Quốc gia cho PowerCountry đang nắm giữ một Power. –
Hmm tôi có thể hỏi Abkhazia và Transnistria được đưa vào một đoạn mã Haskell không? Làm thế nào bạn có liên quan với hai nơi đó? Bạn đang làm việc trên một số loại trò chơi? Bạn đến từ quốc gia nào? –
Abkhazia và Transnistria là người đầu tiên và cuối cùng trong danh sách "Các tiểu bang khác" trên http://en.wikipedia.org/wiki/List_of_sovereign_states Tôi chỉ học Haskell và đưa ra một cái gì đó để thực hành. Tôi đoán nó có thể là một trò chơi, nhưng tôi chưa có ý định. –