HaskellでBrainf*ckを実装してみた

とりあえず、すごいH本がIO処理のところまでいったので
練習としてbrainf*ckの処理系作ってみました。
ソースコードはこちら→https://github.com/ikaro1192/brainfuck
括弧の処理とか一部の挙動が怪しいですが、なんとかうごきます。

基本的にはイテレータがさしているかのフラグと、値を保持している
リストというメモリをあらわす型を作ってそれをマップして変更していく感じです。

思ったのが、型が強力でいいなーと。
キャストがないのはやりすぎじゃないかとか最初はおもってましたが、 それで困ることがないです。
型が物理的制限というより論理的制限になっているからでしょうか?
最低限満たすべき条件として型があるので、それを満たさなかったらそもそもわたす
ほうがおかしいという感じです。
たとえばCとかだとintとかdoubleとかキャストする必要がある場合がありますが、
Haskellの場合はNumという型があって数のようなものならそれに属しているみたいな
感じです。
C++0x時代に提案されていたコンセプトみたいな感じでしょうか?
そんなわけで型が原因でコンパイルが通らなかったらそれは論理的に
間違っているということで「キャストぐらい気を利かせてやってくれよ...」
とかイライラすることがなかったです。

一番面倒だったのがprintfデバッグができないということ。
関数を細かく分ける必要がありますね。

コードがいつもとぜんぜん違う感じでまだなれないことが多いですがHaskell面白いです。
これははまりそう。