海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
https://github.com/unnohideyuki/monadic_parser_sample
Alex と Haskell Happy で monadic parser をつくってみる演習は、予定していたものを一応つくれた。
ex2 から ex4 まで、それぞれ自分なりに得るものはあったので、もう少しコードをきれいにするのといっしょに、ポイントを書き留める作業はしたい。
ex4 は、まじめに Haskell の文法を解析するのではなく、レイアウト規則を実現するための最低限の grammar を記述したので、"-};" がコメントの最後と認識されなかったりするが、今回は、これでいいことにする。
https://github.com/unnohideyuki/Tiger-in-Haskell
Tiger Book を Haskell でやる遊びは、6章まで来た。
Tiger Book でも、6章あたりのコードは、ML の破壊的代入を活用したコードになっているので、Haskell で書くにあたっては、状態を明に引き回す必要がある。
chap6/Semant.hs にある transExp, transDec は level と temp を受け渡しするように改造して、改造後も chap5 と同じ型検査結果となるところまで確認。
など。
あとは、TL.allocLocal やら TL.newLevel を適切に呼んでやればいい。(それができる状態にはなった)
tDiary 2.2.1 + Ruby 1.8.7 だったのを、tDiary 4.0.4 + Ruby 2.1.2-p95 にアップデートした。
一挙にやったら文字化けしたので、tDiary 3.0.1 をはさんで、データ移行した。
これから、markdown 記法のやつ入れよう。
ん? いま、Insecure operation - encode!って出たな。
よくわからないけど、security がらみっぽいので、tdiary.conf で @secure = false となっていたのを、true にしてみた。
なんとなく、余計に厳しくなって、ダメそうなんだが…。
いけた。
状態を引き回すには、状態モナドがいいのかなとなんとなく思うんだけど、はてな? 自分の引き出しに状態モナドが入っていないことを実感。
あまり自分でつかう機会がなかった、fold は、今回よくつかっている。オレオレ再帰関数ではなく、適切に fold したほうがよいという話だし。
ためしに、tdiary.conf で @secure = true にしてみた。<br>どうだ?