如何制作`Free`数据类型的`Var`实例?

时间:2014-12-17 13:03:53

标签: haskell

在阅读Typeclassopedia关于Monads的章节时,我看到了:

data Free f a = Var a
               | Node (f (Free f a))

我输入:i Free以获取相关信息。

ghci> :i Free
type role Free nominal nominal
data Free (f :: * -> *) a = Var a | Node (f (Free f a))

我见过kind的{​​{1}}的类型:

* -> *

但是,我不确定如何使用ghci> :k [] [] :: * -> * ghci> :k Maybe Maybe :: * -> * 参数创建一个简单的Var实例。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您创建Var的方式仅为Var value,例如Var "x"。由于f实际上并未出现在Var的定义中,因此您选择的f实际上并不会影响您创建Var的方式 - 只有在创建节点时才会这样做。

因此,在创建f[]的节点时,您需要编写Node [Var "x"],而对于Maybe,您需要编写Node (Some (Var "x"))。如您所见,Var的使用在两种情况下保持不变,您只需将不同的“集合”传递给Node构造函数。

相关问题