sampou.orgのhttp://www.sampou.org/cgi-bin/haskell.cgi?Memoiseをほとんど丸写しして,Stateモナドを使ってフィボナッチを書いてみました. import Control.Monad.State rfib :: Integer -> Integer rfib 0 = 0 rfib 1 = 1 rfib n = rfib (n-1) + rfib (n-2) type Cache = [(Integer,Integer)] -- キャッシュ cfib :: Integer -> State Cache Integer cfib 0 = return 0 cfib 1 = return 1 cfib n = do cache <- get case (lookup n cache) of Just k -> return k Nothin