【发布时间】:2012-06-17 18:04:21
【问题描述】:
我正在学习 Haskell 中的代数 DT。我想做的是创建一个新的 ADT 来“扩展”现有的 ADT。我找不到如何表达我想要的东西,有人可以提出替代模式或提出解决方案。我希望它们是不同的类型,但复制和粘贴就像一个愚蠢的解决方案一样接缝。下面的代码最好地描述了我在寻找什么。
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)
编辑:我认为它需要一点澄清......我希望能够做到这一点(在 ghci 中)
let a = Abkhazia :: Country
而不是
let a = Power Abkhazia :: Country
【问题讨论】:
-
想要这样做的原因通常来自 OO-y 学派 ;-),但您总是可以在 Country 中为持有 Power 的 PowerCountry 添加一个构造函数。
-
嗯,请问阿布哈兹和德涅斯特河沿岸是如何进入一段 Haskell 代码的?你和这两个地方有什么关系?你在做某种游戏吗?您来自哪个国家/地区?
-
阿布哈兹和德涅斯特河沿岸是en.wikipedia.org/wiki/List_of_sovereign_states“其他州”列表中的第一个也是最后一个我正在学习 Haskell,并想出了一些可以练习的东西。我想这可能是一场游戏,但我还没有打算。
标签: haskell algebraic-data-types