人気ブログランキング | 話題のタグを見る

IOモナド怖い、まんじゅう怖い。

闇雲に恐れられているIOモナドだが、引数をひとつ取り、IO型の戻値を返す関数のことだと割りきってしまうと、いろいろと面白いことができる。自前のIOモナドの関数を作ると、>>= 演算子で他の標準のIOモナド関数につなげて使うことができるからだ。Unixのパイプライン処理のようなものだ。

たとえば次のような、IOモナドの関数、sortlines を定義してみる。

import List

sortlines :: String -> IO String
sortlines str = return ( unlines $ sort $ lines str )

そうすると、次のような内容のテキストファイル hello.txt があるとすると、

hello
world
how
are
you
doing

次のようなプログラムを Hugs 上で実行すると、ファイルの行をソートして表示してくれる。

Main> readFile "hello.txt" >>= sortlines >>= putStr
are
doing
hello
how
world
you

また、次のように入力すると、ソートした行をテキストファイルにして保存することもできる。

Main> readFile "hello.txt" >>= sortlines >>= writeFile "newfile.txt"

自前の関数をIOモナドとして定義することで、他のIOモナドの関数との組み合わせが楽になる。そのうえ、自前のIOモナドの作り方は、引数をひとつ取り、IO型の戻値を return 関数で返すだけという簡単さだ。

怖い、怖いIOモナドが、実はまんじゅう怖いの怖いだったのだ。
by tnomura9 | 2010-10-14 17:54 | Haskell | Comments(0)
<< 複数の引数を持つIOモナド型関数 WinHugs のプロンプトで... >>