JavaでFree Monad

書いた

https://github.com/xuwei-k/free-monad-java


以前紹介したhighj
http://d.hatena.ne.jp/xuwei/20130501/1367395022
の仕組み使ったら、それほどキャスト使わずにできた。実装はScalaというかScalazのものを真似した。
しかし、Javaには末尾再帰最適化ないので、resumeがあれではダメで、自前でwhile使ったコードに書き直す必要がある。が、型合わせるのが辛くて一旦断念した。stack使わないように書き直せた https://github.com/xuwei-k/free-monad-java/commit/eab1b5d65bcc1d


この仕組み真似したら、 C# とかで高階型を表現できたりしないのかなー、と一瞬思ったが、 C# というか .NETVM詳しくないしよくわからない。まぁそんな簡単にうまくいくわけない気がする

F# に移植できたらしい(?) https://github.com/pocketberserker/free-monad-fsharp