如何在 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
,它需要一个点。第二个自然表示玩家在给定坐标处放置了一个棋子。
我正在 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
,它需要一个点。第二个自然表示玩家在给定坐标处放置了一个棋子。