Haskellツイート最近のHaskell最近はHaskellに関するブログ記事をちらほら見かけるようになって来ました。日々のスクリプトに使おうとしようという人もいるようで、http://d.hatena.ne.jp/aya_eiya/20120221/1329836207このようなブログ記事を見かけました。Haskellで書いたらそんなに汚いコードにはならないというのはたしかにあります。やってはならないということがHaskellには比較的少ないのだと思います。そんなHaskellのプログラムも、少し工夫すればもっと良くなることもあります。先ほどのブログの記事の1つ目のプログラムを見てみましょう。このプログラムは、与えられた文字列の書く文字を大文字、小文字にした各パターンを全て返すものです。難点があるとすれば少しややこしいということでしょうか。コードを読んでみると次のようになっています。["ABCD","ABCd","ABcD","ABcd","AbCD","AbCd","AbcD","Abcd","aBCD","aBCd","aBcD","aBcd","abCD","abCd","abcD","abcd"]関数をそのまま使うこのような三段階を踏んでいます。関数型言語なので、toUpper、toLowerをそのまま使えます。c|(f,c)<-cs]]]リストの生成の仕方コードの添削が目的では無いので、本題に入ります。これは何かたくさんの候補を生成するタイプの問題です。このような問題ではリストモナドが使えます。よってリストがモナドとして用いられています。遠回りをしているようです。生成の仕方を変えてみましょう。この問題の趣旨はこうです。(次のコードは概念を示したもので、実際のHaskellプログラムとしては正しくありません)。各文字が大文字か小文字か、あり得るすべてのパターンが網羅されたリストが返るはずです。