以下のfumievalさんの記事に遅れること約2年・・・、ついにScala界隈にも、究極のモナド(?) Idealモナドが誕生した。
究極のモナド「Idealモナド」を垣間見る
究極のモナド「Idealモナド」を垣間見る(続/その0)
下のほうにその実装と、とりあえずIdealモナド経由でTrampolineを作って動かしてみた例を貼っておく。
ポイントは、単純なHaskellからの完全直訳ではなく、scalaz.Freeと同じようにGosubを作ったことにより、おそらくstack safeになった*1ことである(30を超えるフィボナッチが動くので、たぶん)
だがしかし、そもそも抽象化されてるのか、というかFreeではなくIdealにすることによる実用的な嬉しさが全く見えてないのと、かなり簡易的に計測しただけでも、Ideal版のTrampolineによるフィボナッチがscalaz.Freeの2倍程度遅いということだけがわかった・・・(完
誰か、実用的なIdealモナドの使い方教えてください・・・
https://gist.github.com/xuwei-k/1cb8954c6adf61f18643
追記
*1:スタックオーバーフローしない、という意味