Parsec

HaskellのParsecを使ってSmart Game Formatのパーサがやっとできました。再帰データ型やらShowクラスやらParsec以前に頭に入れることがあって大変でしたが、終わってみると、なるほど実装がほとんど見えない仕様に近いコードになる。
パースした後のデータ構造とパーサを平行して書くようにしたのですが、構造が同じなので冗長に見える。でtype宣言を消してみたら、問題なくコンパイル実行されるじゃないですか。

type SGFCollection = [SGFGameTree]
sgfCollection :: Parser SGFCollection

なんてコンパイラは必要としないのね。当たり前か。かといって、typeさぼったら読めなくなるし。