海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
https://github.com/unnohideyuki/monadic_parser_sample/tree/master/ex4
Haskell のレイアウト規則で、
If the indentation of the non-brace lexeme immediately following a where, let, do or of is less than or equal to the current indentation level, then instead of starting a layout, an empty list “{}” is inserted, ...
とある部分に未対応だった。
foo = let
in
putStrLn "foo"
main = foo
現在の版で、上記のコードを ex4/Parser に食わせると、こうなる:
foo = let
{ in putStrLn "foo" } main = foo
let と in の間に、空の {} が挿入されるべき。
いまから直す。→ と思ったけど、もう少しまじめに grammar 書かないといけなさそう。今日はやめておこう。
let {} in hoge は Parser で普通にできそうだが、現状の ex4/Parser は in をキーワードと認識してない。
Empty 'do' block は ghc はエラーにしているようだ。
※やっぱり、まだレイアウトルールがいまいちわかってないかも。
(10.3を読むべきらしい。)
Tiger Book chap6 については、Semant.hs での Temp.newLabel, TL.newLevel, TL.allocLocal 追加はやった。つぎは、findEscape を書いて、テストしたら、6章おわり。
Git for Windows は 1.9.2 にバージョンアップした。