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