Free Monad ってなんだろう

先日の渋谷での第74回Scala勉強会では、nescalaの資料を読んだのですが

勉強会のwikiページ

そのなかで、この資料

Dead-Simple Dependency Injection

にでてくる Free Monad について。

勉強会中、とりあえずひと通り読んで、なんとなーく理解した後に
「あれ、これってIOモナドとか他のものでも書けるんじゃね?何が違うんだろう?」
的な意見がでて、だがしかしそれを詳しく説明出来る人もいないし、考えても調べてもすぐに分かるような問題じゃない・・・ので放置してた。
が、まさにそのことについて発表した本人が twitter 上で話していたのでメモ。

まぁこれもまた、なんとなくしか理解できてないですが・・・一応怪しい訳で、自分なりに簡単にまとめると

  • Free Monad 以外でも書ける
  • けど、Free Monad で書いたほうがプログラムが明確になる(行う操作の種類を、わざと事前に決めて制限することによってわかりやすくなる的な理解でいいんだろうか?)
  • State Monad と違って StackOverflow しない
  • 並列に合成できる(?)

という感じでしょうか?