編集可能
2013年6月30日

Operational Monad

今、Haskell 界隈で熱い話題の Operational Monad に関する議論。
8
Mitsutoshi Aoe/maoe @ma0e

freeモナドとsymanticsは目的が違うので直接比較するものじゃないと思うのだけど違うのかな。例えばASTとインタプリタとプリティプリンタを作る場合、ASTのデータの構築というか接ぎ木を簡単にmonadicなAPIにできますよというのがfreeモナドで

2013-06-24 20:47:52
Mitsutoshi Aoe/maoe @ma0e

symanticsの方はタグがいらないとかGADTみたいなリッチな型がなくてもいいとかexpression problemを解決できるよとかそういう話だと思う。

2013-06-24 20:49:12
Mitsutoshi Aoe/maoe @ma0e

両者の比較でやっていることはfreeモナド vs. symanticsというよりはinitialなエンコード vs. finalなエンコードなように見える

2013-06-24 20:50:11
Mitsutoshi Aoe/maoe @ma0e

さらっとinitialとfinalっていったけどinitialとfinalが本当にどういう意味なのかは理解してない。たぶん圏論勉強会で出てくると思う。

2013-06-24 20:56:56
山本和彦 @kazu_yamamoto

Free だとあんまり触手が動かなかったけど、Free Operational までくると本質だけ書けばいいので、使う気になるなぁ。

2013-06-27 10:11:21
山本和彦 @kazu_yamamoto

試しに GADTs を削った瞬間に、その必要性が分かった。

2013-06-27 10:13:51
山本和彦 @kazu_yamamoto

.@fumieval 純粋にテストするには、view を使うのが正解ですか? 単純に interpret できるといいんだけど、その方法は分かりませんでした。 http://t.co/EZCN56k0RU

2013-06-27 10:16:40
山本和彦 @kazu_yamamoto

何も制約がないから「自由」らしいのだが、どうして持ち上がるのか誰か教えて欲しい。

2013-06-27 10:33:01
山本和彦 @kazu_yamamoto

Monad に限らず、一般的なデータに対して deriving するには、何かの性質を満たさないといけないとかあるんでしょうか?

2013-06-27 10:33:58
ふみ a.k.a.DJ Monad @fumieval

@kazu_yamamoto そうですね。interpretはモナドに変換するためのものなので、テストする対象がモナドであればinterpretも使えます

2013-06-27 11:16:43
ふみ a.k.a.DJ Monad @fumieval

free-operationalパッケージは全然イケてないという問題がある

2013-06-27 11:21:01
山本和彦 @kazu_yamamoto

.@fumieval Writer に変換するコードは、どうなりますか?

2013-06-27 11:24:59
山本和彦 @kazu_yamamoto

.@fumieval どの辺りが、イケてませんか?

2013-06-27 11:29:24
ふみ a.k.a.DJ Monad @fumieval

@kazu_yamamoto go :: t a -> wのとき、interpret (tell . go) :: MonadWriter w a => Program t a -> m aみたいな感じです。

2013-06-27 11:31:34
ふみ a.k.a.DJ Monad @fumieval

.@kazu_yamamoto 内部実装に無駄が多い、Operationalクラスに柔軟性がないという点です。viewはlensの関数と被るのも個人的に微妙でした。

2013-06-27 11:36:00
ふみ a.k.a.DJ Monad @fumieval

https://t.co/krSlntSD0X free-operationalに代わるOperationalモナドの実装を作っているので、ぜひissueやpull requestをください

2013-06-27 11:37:53
山本和彦 @kazu_yamamoto

.@fumieval 夏休みのバイトにも関連しますが、どういう方向に持っていきたいのですか? 自分で作り直す? free-operational を育てる?

2013-06-27 11:38:20
ふみ a.k.a.DJ Monad @fumieval

@kazu_yamamoto そこはまだ迷っていますが、free-operationalを私好みにするとコードの大部分が変わってまって作者に申し訳ないので、自分で作るという方向でいこうかなと考えています。

2013-06-27 11:44:25
ふみ a.k.a.DJ Monad @fumieval

まだ作っている途中だけれど、Template Haskellを使って Operationalモナドのためのアクションを生成させるということも考えている

2013-06-27 11:47:54
山本和彦 @kazu_yamamoto

.@fumieval interpret は forall a を要求するけど、tell は () なので型が合わないような。それ以前に、Writer [String] a のように Writer の最後が a であるプログラムは見たことがありません。

2013-06-27 14:55:33
ふみ a.k.a.DJ Monad @fumieval

@kazu_yamamoto あっ…そうですね。interpretに渡す際はモナドを直接生成する必要がありました

2013-06-27 15:47:21
ふみ a.k.a.DJ Monad @fumieval

下位の概念が、上位の概念を解釈<インタプリト>するというのはこの世の真理だ

2013-06-28 09:39:09
山本和彦 @kazu_yamamoto

昨日、@9_ties さんに教えてもらったことを連続ツイートするよ。まだ完全に理解できてないので雰囲気だけ。

2013-06-28 09:50:48
残りを読む(51)

コメント

コメントがまだありません。感想を最初に伝えてみませんか?