小编Moo*_*cks的帖子

一种将 Haskell 的任何类型概括为任意多种类型的方法?

我正在创建一个回合制游戏。我想定义一个数据类型,从许多可能的类型中编码一种类型。这是一个励志的例子:

我已经Turn使用 GADT定义了一个类型,所以每个值的类型都Turn a说明了它的值。

data Travel
data Attack
data Flee
data Quit

data Turn a where
   Travel :: Location -> Turn Travel
   Attack :: Int -> Turn Attack
   Flee :: Turn Flee
   Quit :: Turn Quit
Run Code Online (Sandbox Code Playgroud)

现在我可以写出这样的类型decideTravel :: GameState -> Turn Travel,非常有表​​现力而且很好。

当我想返回多种可能的转弯类型之一时,就会出现问题。我想编写类似于以下的函数:

-- OneOf taking two types
decideFightingTurn :: GameState -> OneOf (Turn Attack) (Turn Flee)
-- OneOf takes three types
decideTurn :: GameState -> OneOf (Turn Attack) (Turn Travel) (Turn Quit)
Run Code Online (Sandbox Code Playgroud)

此 …

haskell types either parametric-polymorphism

7
推荐指数
1
解决办法
275
查看次数

标签 统计

either ×1

haskell ×1

parametric-polymorphism ×1

types ×1