Freeモナドを見ていたら、これってどこかで見た事があるような気がする...そう!不動点コンビネータです!!!
Freeモナド: Free f a := Pure a | Free (f (Free f a))
不動点コンビネータ: Fix f := f(Fix f)
FreeやFixが内容を包む形になっていますね。
ちょっと生半可な知識で調べてみたところ以下にような事がわかりました。
FreeとFixの違いについて。
・Freeは>>=による自然な拡張が行えるがFixにはできない(面倒)
・FreeはPureの存在により終点が必ず存在することが保証されるがFixの場合そうではない(Fix(identity)など)
「FreeはFunctorのFixpointである」らしいです。
Haskell難しいです。