ekmett/trifecta内部のItというデータ構造について

本人からmentionきて驚くなど((((;゚Д゚))))
2
Kenji Yoshida @xuwei_k

この It というの、つまり scott encoding のためのデータ構造なんでしょうか? #Haskell github.com/ekmett/trifect…

2014-10-06 22:31:16
ふみ (DJ Monad) @fumieval

@xuwei_k It自体はムーアマシンを表現する構造で、runItはスコットデコーディング(一枚だけ剥がす)する関数ですね。チャーチなら(a -> o) -> (a -> (r -> o) -> o) -> It r a -> oとなります

2014-10-07 16:30:59
Kenji Yoshida @xuwei_k

@fumieval なるほど、ありがとうございます。少しScalaへの移植試してたんですけど、ソース見ただけじゃ説明少なくてわからないのと、移植しても遅延評価の関係で効率よくならないかもとか、スタック溢れるかもしれない問題がやってみないとわからない、などあって苦戦してました

2014-10-07 16:48:13
Kenji Yoshida @xuwei_k

ermine-parserのScalaz version上げに挑戦→超難関→そもそも(歴史的経緯で?)汚い、単なるparserではなくermine特有コード残ってる、元のHaskellと結構違う→勉強のために最初から移植してみよう→Itってなんだよ→ムーアマシンだと教えてもらった

2014-10-07 16:53:47
ふみ (DJ Monad) @fumieval

@xuwei_k なるほど。ekmettが"scott decoding"と書いているのは単なるパターンマッチなので、普通にパターンマッチで実装するのが無難かと思いました。

2014-10-07 16:54:22
Kenji Yoshida @xuwei_k

あと、自分が正しくScalaに移植できたのだとしたら、trifectaのItのApplicativeとMonadのインスタンスが整合性ない問題をまたもや発見した気がしたけど、あまり確証持ててないし単なる自分のミスの可能性も多いに残ってるので、今日帰ったら再び調べる

2014-10-07 17:00:07
ふみ (DJ Monad) @fumieval

@xuwei_k ぱっと実装を見ただけですが、 github.com/ekmett/machine… もしかするとekmettがこれと同じ間違いをしているかもしれません

2014-10-07 17:05:48
Kenji Yoshida @xuwei_k

@fumieval なるほど? (fumiさんが直すというかpull reqしてもらえるならそのほうがはやそうだし、できるならお願いしてしまいたい感)

2014-10-07 17:10:32
Kenji Yoshida @xuwei_k

なるほど、これとこれ同型・・・、と一瞬思ったが、Pureがあるから違うか github.com/ekmett/machine… github.com/ekmett/trifect…

2014-10-07 17:24:25
ふみ (DJ Monad) @fumieval

@xuwei_k モナド則は一応満たすっぽいですが、GHC 7.10までにどうにかしないとまずいことになりそうです…一応ekmettには旨を伝えておきました。

2014-10-07 17:52:20
ふみ (DJ Monad) @fumieval

@xuwei_k Itはなるべく則を満たすような入力(この場合Rope)を与えるという用途に限定されているので(実際内部でしか使わない)、問題ないそうです。

2014-10-07 22:33:47
Edward Kmett⏏️ @kmett

@xuwei_k It r is a monad under assumptions about how r is changed. You gain information and pass an updated rope to it.

2014-10-07 22:38:08
Edward Kmett⏏️ @kmett

@xuwei_k The answer in the continuation case is not allowed to change based on the precise meta knowledge about when you extend the rope.

2014-10-07 22:39:47
Edward Kmett⏏️ @kmett

@xuwei_k It is a Monad only under that assumption and the Applicative should be consist with that (and only that) use case.

2014-10-07 22:40:44