map :: (a -> b) -> [a] -> [b]
fmap :: Functor f => (a -> b) -> f a -> f b
liftM :: Monad m => (a -> b) -> m a -> m b
Warum haben wir drei verschiedene Funktionen, die im Wesentlichen dasselbe tun?
map
und liftM
sollte mit Sicherheit genau das Gleiche tun wie fmap
.
fmap
und liftM
genau das Gleiche tun, ist dies map
natürlich nur ein Sonderfall, dh etwas anderes. fmap id getLine
ist gut getippt, wohingegen map id getLine
es nicht ist.