明示再帰除去

.cabal の更新コミットは、とりあえず cabal-dev install が成功するようになるまで言われるままパッケージ名を追加しただけです。

main 関数の再帰除去はなんていうか、奥が深い症候群っていうか、余計読みづらくなっただけのような気もしますが…。

ただ、似たような再帰ループをする main を書いていてそれは一応上手く動いていたんだけど、後で最後の if の後ろにうっかりコード追加したら末尾再帰じゃなくなってメモリ食いまくって途中で死ぬプログラムになってしまったとかいう残念な経験があるので、こうしておくとそういうバカなミスは防げるようになるっていう利点は一応あるかなーとかは思います。

mzero を発行すればいつでもループを抜けられるので便利ですが、lift せにゃならんのが面倒といえば面倒ですね。 do 構文内では <<- とか > とかで、記号の数だけ lift できる Syntax Sugar とか用意しようぜ、って言ってた人が居たような気もしますが。