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

rau*_*sch 2 haskell

我正在实施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’.但是,仅定义PointMove也似乎不对,因为我并不专门用于Point移动的上下文中.能够通过这些地方会很奇怪.

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

Lem*_*ing 7

什么

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,它带有一个点.第二个自然地表明,玩家在给定坐标处放置一块.