Haskell 在哈斯克尔的《自由单子》中,“纯”是什么意思?
我试着学习自由单子。我发现:Haskell 在哈斯克尔的《自由单子》中,“纯”是什么意思?,haskell,free-monad,Haskell,Free Monad,我试着学习自由单子。我发现: data Free f r = Free (f (Free f r)) | Pure r 纯是什么意思?为什么我需要r和Pure?Pure对应于return操作——从概念上讲,它将“注入”值的能力附加到函子上。Free构造函数对应于“join” 如果您想了解为什么“需要”Pure,请尝试删除它,并给出Monad实例,看看您在哪里卡住了 你已经读过了吗?Pure是构造函数的名称。您需要r在Pure r中,因为您需要在Pure中放入一些内容。您不能将f放在Pure的内
data Free f r = Free (f (Free f r)) | Pure r
纯是什么意思?为什么我需要r和Pure?
Pure
对应于return
操作——从概念上讲,它将“注入”值的能力附加到函子上。Free
构造函数对应于“join”
如果您想了解为什么“需要”
Pure
,请尝试删除它,并给出Monad
实例,看看您在哪里卡住了 你已经读过了吗?Pure
是构造函数的名称。您需要r
在Pure r
中,因为您需要在Pure
中放入一些内容。您不能将f
放在Pure
的内部,因为没有类型为f
的值。所以你有第二种类型的变量,这就是你放在Pure
里面的内容。如果问题是为什么需要Pure
,那么答案是需要一种结束递归结构的方法(为什么需要[]
?)。作为叶节点的构造函数可以位于Free
数据类型中,也可以位于Free
内部的f
中,在这种情况下,您将有两个不同(冗余)的叶节点构造函数。