免费 Monads 就像固定点
Free
的定义比较一下自己的 Fix
:
data Free f a = Return a
| Free (f (Free f a))
newtype Fix f = Fix { unFix::f (Fix f) }
特别是,将 Free
构造函数的类型与 Fix
构造函数的类型进行比较。Free
就像 Fix
一样叠加了一个仿函数,除了 Free
还有一个 Return a
的情况。
Free
的定义比较一下自己的 Fix
:
data Free f a = Return a
| Free (f (Free f a))
newtype Fix f = Fix { unFix::f (Fix f) }
特别是,将 Free
构造函数的类型与 Fix
构造函数的类型进行比较。Free
就像 Fix
一样叠加了一个仿函数,除了 Free
还有一个 Return a
的情况。