State Monad
*Main> :t runState runState :: State s a -> s -> (a, s) *Main> :t (do c<-get; put [1,2,3]; return "hogehoge") (do c<-get; put [1,2,3]; return "hogehoge") :: (Num a, MonadState [a] m) => m [Char] *Main> :t runState (do c<-get; put [1,2,3]; return "hogehoge") runState (do c<-get; put [1,2,3]; return "hogehoge") :: (Num a) => [a] -> ([Char], [a]) *Main> runState (do c<-get; put [1,2,3]; return "hogehoge") [] ("hogehoge",[1,2,3])
やっとこさState Monadを自分で記述出来るレベルまで習得した。やっぱ型式だけ見てても駄目ね...。Closureさん頑張ってるなぁ。