この It というの、つまり scott encoding のためのデータ構造なんでしょうか? #Haskell github.com/ekmett/trifect…
2014-10-06 22:31:16@xuwei_k It自体はムーアマシンを表現する構造で、runItはスコットデコーディング(一枚だけ剥がす)する関数ですね。チャーチなら(a -> o) -> (a -> (r -> o) -> o) -> It r a -> oとなります
2014-10-07 16:30:59@fumieval なるほど、ありがとうございます。少しScalaへの移植試してたんですけど、ソース見ただけじゃ説明少なくてわからないのと、移植しても遅延評価の関係で効率よくならないかもとか、スタック溢れるかもしれない問題がやってみないとわからない、などあって苦戦してました
2014-10-07 16:48:13ermine-parserのScalaz version上げに挑戦→超難関→そもそも(歴史的経緯で?)汚い、単なるparserではなくermine特有コード残ってる、元のHaskellと結構違う→勉強のために最初から移植してみよう→Itってなんだよ→ムーアマシンだと教えてもらった
2014-10-07 16:53:47@xuwei_k なるほど。ekmettが"scott decoding"と書いているのは単なるパターンマッチなので、普通にパターンマッチで実装するのが無難かと思いました。
2014-10-07 16:54:22あと、自分が正しくScalaに移植できたのだとしたら、trifectaのItのApplicativeとMonadのインスタンスが整合性ない問題をまたもや発見した気がしたけど、あまり確証持ててないし単なる自分のミスの可能性も多いに残ってるので、今日帰ったら再び調べる
2014-10-07 17:00:07@xuwei_k ぱっと実装を見ただけですが、 github.com/ekmett/machine… もしかするとekmettがこれと同じ間違いをしているかもしれません
2014-10-07 17:05:48@fumieval なるほど? (fumiさんが直すというかpull reqしてもらえるならそのほうがはやそうだし、できるならお願いしてしまいたい感)
2014-10-07 17:10:32なるほど、これとこれ同型・・・、と一瞬思ったが、Pureがあるから違うか github.com/ekmett/machine… github.com/ekmett/trifect…
2014-10-07 17:24:25@xuwei_k モナド則は一応満たすっぽいですが、GHC 7.10までにどうにかしないとまずいことになりそうです…一応ekmettには旨を伝えておきました。
2014-10-07 17:52:20@xuwei_k Itはなるべく則を満たすような入力(この場合Rope)を与えるという用途に限定されているので(実際内部でしか使わない)、問題ないそうです。
2014-10-07 22:33:47@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@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@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