Haskell免费的Monad就像固定点

示例

比较的定义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情况。