fmap :: Functor f => (a -> b) -> f a -> f b
看起来,首先将函数 (a -> b) 应用于 f a 的参数,以创建类型为 b 的结果,然后将 f 应用于该结果,其结果是 f b。
以 Maybe a
为例:
fmap show (Just 1)
result is : Just "1"
同样意思的说法:
Just (show 1)
但是当 (->)
作为一个 Functor(在 Control.Monad.Instances
中)被使用时
import Control.Monad.Instances
(fmap show Just) 1
result is : "Just 1"
也就是说,首先应用Just
,然后再应用show
。在另一个例子中,结果相同:
fmap (*3) (+100) 1
result is 303
为什么不先使用*3
,然后再使用+100
?