Data.IORefを使ってみよう
30分プログラム、その513。Haskellでmutableな変数が使えると評判のData.IORefを使ってみた。
で、いざ書き換え可能な変数があるとなると、なかなかいいサンプルが思いつかない。しょうがないので、フィボナッチ数で関数が何回呼び出されるかカウントするやつを作ってみた。
わりとStateモナドとの違いが分からない。
使い方
*Main> fibWithCount 10 (55,177)
ソースコード
import Data.IORef incr ref = do modifyIORef ref (+1) fib :: IORef Int -> Int -> IO Int fib ref n = do incr ref if n <= 1 then return n else do x <- fib ref (n-1) y <- fib ref (n-2) return $ x + y fibWithCount n = do ref <- newIORef 0 answer <- fib ref n count <- readIORef ref return (answer,count)