もしRubyistがHaskellを学んだら(4) 乱数の出力
タグ: learning_haskell / 初版公開: 2013-11-01

今日はHaskellで乱数を出力してみようと思う。Haskellの公式サイトのThe global random number generatorの例をそのまま使う。

import System.Random
rollDice :: IO Int
rollDice = getStdRandom(randomR(1, 6))

昨日は関数を定義したが、このrollDiceの定義は一体何なのだろうか。IO Intを返すことの意味が良くわからない。

Intを文字列に変換するのはshowでできることがわかっている。しかし、この関数の返り値は、そのままでは文字列にすることはできないようだ。

ここではじめて2行あるmainを欠くことになった。<-はHaskellで束縛と呼ぶらしく、これでIO Intを普通のIntにすることができる。

import System.Random
rollDice :: IO Int
rollDice = getStdRandom(randomR(1, 6))
main = do
	rand <- rollDice
	putStrLn(show rand)

調べてみると、この例は以下のように書けることがわかった。>>=とはおまじないだ。しかし、printではない関数を使うことはできない模様。うむむ。

import System.Random
rollDice :: IO Int
rollDice = getStdRandom(randomR(1, 6))
main = rollDice >>= print

以下のQ & Aを見ると、>>=オペレータも束縛であるそうだ。純粋関数やIOモナドというHaskell特有の単語が散らばっており、今の時点で理解するのは難しい。

いまいちな内容になってしまったが、今日はここまで。