免费 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 的情况。