如何定义包含Haskell中已存在类型的枚举类型

时间:2015-03-04 11:00:38

标签: haskell

我正在哈斯克尔实施Go游戏。我有一个Point类型,用于指定网格上的一个点:

data Point = Point (Int, Int)

我有另一种代表游戏的类型。除其他外,它包含moves,它基本上是Point的列表。现在我需要扩展移动的定义,也包括玩家通过的可能性,所以我尝试了这个:

data Move = Pass | Point (Int, Int)

可以理解,编译器不喜欢这个,它抱怨Multiple declarations of ‘Point’。但是,仅在Point中定义Move似乎也不正确,因为我不会在移动的上下文中专门使用Point。能够通过这些地方会很奇怪。

我可以在这里使用Maybe,但我想比这更具体。我该怎么做?

1 个答案:

答案 0 :(得分:7)

什么

data Point = Point (Int, Int)

确实是使用一个数据构造函数Point来定义类型Point,它带有一个Ints元组。

我认为对行动的更好定义将是

data Move = Pass | Place Point

这将创建一个类型Move,其中包含两个构造函数,一个名为Pass,另一个名为Place。第二个自然地表明,玩家在给定坐标处放置一块。