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
中,在这种情况下,您将有两个不同(冗余)的叶节点构造函数。