我正在哈斯克尔实施Go游戏。我有一个Point
类型,用于指定网格上的一个点:
data Point = Point (Int, Int)
我有另一种代表游戏的类型。除其他外,它包含moves
,它基本上是Point
的列表。现在我需要扩展移动的定义,也包括玩家通过的可能性,所以我尝试了这个:
data Move = Pass | Point (Int, Int)
可以理解,编译器不喜欢这个,它抱怨Multiple declarations of ‘Point’
。但是,仅在Point
中定义Move
似乎也不正确,因为我不会在移动的上下文中专门使用Point
。能够通过这些地方会很奇怪。
我可以在这里使用Maybe,但我想比这更具体。我该怎么做?
答案 0 :(得分:7)
什么
data Point = Point (Int, Int)
确实是使用一个数据构造函数Point
来定义类型Point
,它带有一个Ints元组。
我认为对行动的更好定义将是
data Move = Pass | Place Point
这将创建一个类型Move
,其中包含两个构造函数,一个名为Pass
,另一个名为Place
。第二个自然地表明,玩家在给定坐标处放置一块。