如何在 Haskell 中定义包含现有类型的枚举类型

How to define an enumerating type includng an already existing type in Haskell

我正在 Haskell 实现围棋游戏。我有一个类型 Point,它指定网格上的一个点:

data Point = Point (Int, Int)

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

data Move = Pass | Point (Int, Int)

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

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

什么

data Point = Point (Int, Int)

是用一个数据构造函数Point定义类型Point,它接受一个整数元组。

我认为对移动的更好定义是

data Move = Pass | Place Point

这将创建一个具有两个构造函数的类型 Move,一个称为 Pass,另一个称为 Place,它需要一个点。第二个自然表示玩家在给定坐标处放置了一个棋子。