IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

構造を保つ関数の比較

map

> :t map 
map :: (a -> b) -> [a] -> [b] 

fmap

> :t fmap
fmap :: Functor f => (a -> b) -> f a -> f b 

traverse

> :t traverse
traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)

mapM

> :t mapM
mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
比較
            change values ------------------   a------b       a----------b 
                                               |      |       |          |   
                                               v      v       v          v   
map      ::                                   (a ->   b) ->  [a] ->     [b] 
fmap     :: Functor f                      => (a ->   b) -> f a  ->    f b 
traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a  -> f (t b)
mapM     :: (Traversable t, Monad m      ) => (a -> m b) -> t a  -> m (t b)
                                                            ^         ^   
                                                            |         |   
                                                            |         |   
            keep structure  ----------------                t---------t