以前いくつか関連したもの書きましたが
たぶんFree MonadPlus出来た気がします。
https://github.com/scalaz/scalaz/pull/1056/
そして、scalazにFreeTという (stack overflowしない) Free Monad Transformer 入ったの解説したことなかったですね。
https://github.com/scalaz/scalaz/pull/1035
purescriptのやつ真似したら出来たらしいです。自分も説明できるほどに理解できてません。scalazのものが、微妙にpurescriptのものと違う気がするのですがなんなんでしょう?
というわけで、解説の代わりにいくつかリンクだけ貼っておきます。
- purescriptとscalazとMonadRecというstack safeなモナド
- https://github.com/purescript/purescript-tailrec
- http://functorial.com/stack-safety-for-free/index.pdf
FreeT自体も、FreeTのMonadPlusのインスタンスも、scalapropsでテスト書いて通ってるので大丈夫だと思います。
あと、この件があったりして、まだscalaz7.2のfinal出せてないけどはやめに出したい