ふと思い立って Haskell で brainfuck を書いてみた。そんな事やってる人は沢山いると思うので、一つ制限をつけた。モナドは main 関数の中だけしか使わない。つまり、後は全部副作用なしでやる。 それから、大体の方針を立てた。brainfuck の文法はとても単純なので、もしかしてパーサすらいらないんじゃ無いかと思ったのだけど、ループがある関係上やっぱり最初に構文木を作ったほうがやりやすい。という事でオーソドックスに、ソースコード -> 構文木 -> 実行、と言う順序で進める事にした。 -- Parser data Command = Inc | Dec | Next | Prev | Put | Get | While [Command] deriving (Show, Eq) type Program = [Command] parse :: String -> Prog