今回はリストモナドについてお話しします。これまで普通に使ってきたあのリストもHaskellではモナドの仲間です。リストの定義をよく見てみましょう。ghciを起動します。GHC.Base(リストのinstance宣言がつづきます)リストがモナドになっていることがお分かりになると思います。リストはモナドクラスのインスタンスなのです。[]リストのinstance宣言は上記のようになっています。実際にリストをモナドとして操作してみましょう。(1+)[2,3,4]いきなりすぎてよく分かりませんね。上記のinstance宣言からこの操作は以下の操作と等価です。(1+))の見通しが悪いので、ラムダ式を使って見やすい形に変形してみましょう。[1,2,3]と変形することができます。[2,3,4]となります。なんとなくリストはモナドなんだな、ということが分かっていただければ大丈夫です。最後にguard関数を紹介しましょう。guard関数を使って整数のリストから奇数のみ抽出する関数を作ります。xとも書くことができます。[1..10][1,3,5,7,9]guard関数についてちょっと見てみましょう。mzeroguard関数はControl.Monadモジュールで上記のように定義されている関数です。guard関数の型に注目です。=>」の部分は『以降に出現する型変数mというのはControl.Monad.MonadPlusのクラス(のインスタンス)でなければならない』という注釈にあたります。Control.Monad.MonadPlusを見てみましょう。[4,5,6][1,2,3,4,5,6]リストモナドでのmzero,mplusの定義をghciから確認してみました。x」がFalseのときは空リストが返ってきます。このような感じになります。x」がTrueの場合はこのような感じです。1[1]今ひとつこのoddList関数の振舞いが分かりづらい、という方はリストの(>>=)関数、(>>)関数、return関数の定義からoddList関数を変形すると見通しが良くなるかもしれません。今回はリストモナドについてお話しました。(西川)______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。ホントのところ今週は「読者の皆さんの職場はどこですか?」のホントのところ。オブラブメルマガ編集のひそやかな楽しみは、読者の皆さんからの感想メール。お返事は遅いですが、それぞれに目を通しつつ、皆さんがどこからこの感想を送ってくれているのか楽しみにしています。