はてな使ったら負けだと思っている deriving Haskell このページをアンテナに追加 RSSフィード

2011-02-26

HIMA' #6 invertible-syntax で発表してきました

|  HIMA' #6 invertible-syntax で発表してきました - はてな使ったら負けだと思っている deriving Haskell を含むブックマーク はてなブックマーク -  HIMA' #6 invertible-syntax で発表してきました - はてな使ったら負けだと思っている deriving Haskell

partake.in に参加してきました!

今回はお題を提案したのが私だったので、なんと私が発表をすることに。しかし前日まで資料を作っていなかったので徹夜をしたところ見事に寝過ごし、30分も遅刻してしまうという……。済みませんでした m(_ _)m

invertible-syntax と云うのは、Parser と Pretty Printer を統合しよう!と云うこころみで、中々面白そうなシロモノです。

PDF版Keynote版もあります。

発表中の JSON パーザの完全な例や、ベンチマークに使ったソース、データなどはGitHub にありますので参考にしてください。雑多に突っ込んだだけなので判りづらいかもしれませんが……。


invertible-syntax について色々調べて試してみた感想としては、良くも悪くもまだ Proof of Concept なんだなあ、と云った感じです。Parser と Printer を統合出来るということを綺麗に示した良いものですが、速度的な面では上の資料にもある通りナイーブすぎて実用にはまだまだ向かないと思います。

しかし、そのまま Applicative スタイルを持ち込むのには障碍があるところを、色々と工夫することでほとんど同じ様な記法で実現してしまうのは凄いなあ、と。その上 Iso と IsoFunctor を導入することで想像以上の表現力が手に入るのは感動的ですらあらあります。

試しに Parsec を Syntax のインスタンスにしてみようとしたのですが、素朴に書いたのでは簡単な例すらちゃんと動かなくて、どうしたもんかなあ、と思っています。誰かわかったら知恵を貸して頂けると嬉しいです。

上手くうごかないと云うのは、P.parseTest (many1 $ subset isDigit <$> token) "12" とかの結果として "12" を期待する訳ですが、どういうわけか "1" しか返ってこない、という……むーん。


invertible-syntax について一時間ほど喋ったあと、後半はこのライブラリ*1でよく使う defineIsomorphisms 関数をネタに Template Haskell の使い方についての発表。

……と云うか、今振り返るとこっちの方が中心になってしまった感があって、当初はやるつもりがなかった準クォートの話などまでしはじめてしまい、終いには「あっ、そういえば今回 invertible-syntax についての発表だった」というような椿事に。まあ想定された事態です。

寧ろ Template Haskell が思い掛けず好評で、「TH 思ったより面白そう!」「THやってみようかな」と云う声がちらほらときこえて、布教に成功したみたいでよかったです。って、invertible-syntax も面白いです!

「Template Haskell についてだけで一度ちゃんとやりたい」みたいな声もあって、そういうのが実現するといいなあ、などと思ったのでした。まる。

*1:正確には partial-isomorphisms

トラックバック - http://haskell.g.hatena.ne.jp/mr_konn/20110226