関数型プログラミング言語Haskell Part13
■ このスレッドは過去ログ倉庫に格納されています
0859デフォルトの名無しさん
2011/02/13(日) 00:09:30モナディックになってしまうが、MArray のインスタンスを使うのはどうだろう?
import Data.Array.IO
import Control.Monad
fix :: (Eq a, Monad m) => (a -> m a) -> a -> m a
fix f x = do
{ y <- f x
; if x == y then return x else fix f y
}
f' :: Monad m => (a -> m Bool) -> (a -> m a) -> a -> m a
f' p k x = do
{ b <- p x
; if b then return x else k x
}
f = f' (getBounds >=> return . (0==) . fst) (\a -> writeArray a 0 100 >> return a)
main = do
{ x <- newListArray (0, 10) [0..] :: IO (IOArray Int Int)
; y <- fix f x
; assoc <- getAssocs y
; print assoc
}
つづく
■ このスレッドは過去ログ倉庫に格納されています