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
的使用在这两种情况下保持不变,您只需将不同的“集合”传递给节点
构造函数