generated at
foldM

Data.Foldableにある



定義
hs
foldlM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b foldlM f z0 xs = foldr f' return xs z0 where f' x k z = f z x >>= k
t を具体化して、もっとわかりやすく書くと
hs
foldlM :: (Monad m) => (b -> a -> m b) -> b -> [a] -> m b foldlM _ acc [] = return acc foldlM f acc (x:xs) = do acc' <- f acc x foldlM f acc' xs


hs
>>> let f a e = do { print e ; return $ e : a } >>> foldlM f [] [0..3] 0 1 2 3 [3,2,1,0]


以下2つは同じ
hs
foldM f a1 [x1, x2, ..., xm]
hs
do a2 <- f a1 x1 a3 <- f a2 x2 ... f am xm