F# でFree MonadとOperational Monad

自分の記事が、JavaやScalaの人にはあまり反応無く、もみあげさん得だったりしたという現象面白い
4
ぽけば @pocketberserker

というわけで、とりあえず @xuwei_k さんの Free Monad in Java を F# 移植してみた。F# っぽくするのはTODO…。 github.com/pocketberserke…

2014-06-10 16:08:34
Kenji Yoshida @xuwei_k

@pocketberserker お、動きましたか? Javaに末尾再帰最適化ないので、ここ github.com/xuwei-k/free-m… があのままだとダメなんですが、F# って末尾再帰最適化されるんでしたっけ?

2014-06-10 16:11:33
ぽけば @pocketberserker

とりあえずダウンキャストだけでもどうにかしたい

2014-06-10 16:11:34
Kenji Yoshida @xuwei_k

@pocketberserker あと、CharToy のサンプル github.com/pocketberserke… だけじゃなく、他にも色々サンプル書いてみたり、stackが溢れないテスト書いたほうがいい気がします(stack溢れないなら、実用になるかも?)

2014-06-10 16:13:03
ぽけば @pocketberserker

@xuwei_k とりあえず最低限は通ったというだけなので、まだスタック溢れないか試してないですね…。関数の末尾再帰最適化あるので、もしかしたら現時点で問題ないかもしれません。

2014-06-10 16:15:11
Kenji Yoshida @xuwei_k

@pocketberserker Javaでの高階型のテクニック、完全に理解しないままhighjのものパクった github.com/svn2github/hig… だけだし、少なからずキャストは発生する気がします。(キャストする箇所が少なくなって限られるだけ)

2014-06-10 16:17:47
Kenji Yoshida @xuwei_k

@pocketberserker F# でFreeが実用的に使えるかどうかはともかく、あれがポーティングできて最低限動くなら、 F# (や C# ) で、 Functor や Monad の型クラス表現できるかも?

2014-06-10 16:19:05
ぽけば @pocketberserker

@xuwei_k そうですねー、道が見えた気がします。

2014-06-10 16:25:15
ぽけば @pocketberserker

なお、C# への移植は私のC# 力のなさ的に諦めました。interfaceの無名クラス実装(?)みたいなのどうすりゃいいんだー。

2014-06-10 16:31:01
ぐるぐる系SQL @bleis

@pocketberserker interfaceの実装クラス作って、コンストラクタでラムダ式とか受け取る感じにするとか?

2014-06-10 16:32:04
Kenji Yoshida @xuwei_k

Java8で書いたFree Monad、stack消費しないようになった(フィボナッチ動いた) github.com/xuwei-k/free-m…

2014-06-11 13:00:59
Kenji Yoshida @xuwei_k

Java8でFree Monad書いたことにより、Javaでできるだけキャスト使わずに、型推論したり、existential type(存在型)っぽいことをする知見が少し身についたのでblog書きたいけど、最近なんだか疲れててblog書く気があまり起きない

2014-06-11 13:04:52
ぽけば @pocketberserker

xuwei_kさんがTrampolineを実装していたのでこちらも追随 github.com/pocketberserke…

2014-06-11 23:27:03
ぽけば @pocketberserker

タイトルミスってたのであげなおし "JavaでFree Monad"をF# に移植してみた - pocketberserkerの爆走 pocketberserker.hatenablog.com/entry/2014/06/…

2014-06-11 23:53:20
ぽけば @pocketberserker

ついでにOperational移植してみるか、と思ったけどCoyonedaから作らないといけないのはだるいぞ…

2014-06-12 00:38:06
Kenji Yoshida @xuwei_k

書いた d.hatena.ne.jp/xuwei/20140613… "JavaでFreeモナドを表現するためのテクニックやexistential type(存在型)の話"

2014-06-12 10:44:48
ぽけば @pocketberserker

あの記事でいうところの存在型っぽいこと、そういえばFsMachinesのawaitsでやった気がする…

2014-06-12 10:50:11
ぽけば @pocketberserker

awaitsじゃなくてTee.left と rightだったし、あれはちょっと違うか

2014-06-12 10:53:32
ぽけば @pocketberserker

やっぱりobjで握り潰さないと厳しいかなぁ…

2014-06-12 11:40:23
安心沢ガブ美 @gab_km

徐ろに F# で書いていると、容易に .NET のジェネリクスの限界にぶち当たるの、なかなか厳しいものがある。

2014-06-12 15:27:43