map :: (a -> b) -> [a] -> [b]
fmap :: Functor f => (a -> b) -> f a -> f b
liftM :: Monad m => (a -> b) -> m a -> m b
Pourquoi avons-nous trois fonctions différentes qui font essentiellement la même chose?
mapet liftMdevraient certainement faire exactement la même chose que fmap.
fmapet liftMfaire exactement la même chose, mapbien sûr, ce n'est qu'un cas particulier, c'est-à-dire quelque chose de différent. fmap id getLineest bien typé, alors que ce map id getLinen'est pas le cas.