mapM
定義
code:hs
mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
mapM f = unwrapMonad . traverse (WrapMonad . f)
こう書いても同じ
code:hs
mapM f xs = sequence $ fmap f xs
データ構造tと計算コンテナmを入れ替えている
a -> m bにt aを適用するとt (m b)になるが、結果はm (t b)である
直観的な理解
map
code:hs
mapM
code:hs
mapM (\x -> Just (x * 2)) 1,2,3 例: 数値を表示しつつ、そのまま返す
code:hs
main :: IO ()
main = do
result <- mapM printAndReturn 1,2,3 print result
printAndReturn :: Int -> IO Int
printAndReturn x = do
print x
return (x * 2)
code:result
1
2
3
関連
読もう