map :: (a -> b) -> [a] -> [b]
fmap :: Functor f => (a -> b) -> f a -> f b
liftM :: Monad m => (a -> b) -> m a -> m b
为什么我们有三个功能基本相同的功能?
32
历史大部分。fmap与map出于教学原因不同,liftM与fmap因历史原因而不同(即Functor不是Monad的超类)
—
luqui 2011年
哦,只是为了清楚起见:他们“根本上”没有做同样的事情。两者
—
CA McCann
map
和liftM
肯定应该做与完全相同的事情fmap
。
虽然
—
Thorsten
fmap
和liftM
做完全相同的事情,但是map
当然只是它们的特例,即有所不同。fmap id getLine
类型正确,但map id getLine
不是。