Haskell 如何使'Free'数据类型的'Var'实例?

Haskell 如何使'Free'数据类型的'Var'实例?,haskell,Haskell,在阅读《单子》一章时,我看到: data Free f a = Var a | Node (f (Free f a)) 我键入了:我可以自由地获取有关它的信息 ghci> :i Free type role Free nominal nominal data Free (f :: * -> *) a = Var a | Node (f (Free f a)) 我见过类型为*->*: ghci> :k [] [] :: * -> * ghc

在阅读《单子》一章时,我看到:

data Free f a = Var a
               | Node (f (Free f a))
我键入了
:我可以自由地获取有关它的信息

ghci> :i Free
type role Free nominal nominal
data Free (f :: * -> *) a = Var a | Node (f (Free f a))
我见过类型为
*->*
:

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


我该怎么做呢?

创建Var的方法就是
Var value
,比如
Var“x”
。由于
f
实际上并不出现在
Var
的定义中,因此您对
f
的选择实际上并不影响您创建Var的方式-它只在创建节点时起作用

因此,当创建一个
f
[]
的节点时,您需要编写
Node[Var“x”]
,而对于
,您可能需要编写
节点(一些(Var“x”)
。正如您所看到的,
Var
的使用在这两种情况下保持不变,您只需将不同的“集合”传递给
节点
构造函数