Functor 中 fmap 的类型是:
fmap :: Functor f => (a -> b) -> f a -> f b
看起来,首先将函数(a -> b)应用于fa的参数以创建b类型的结果,然后将f应用于它,结果为fb
使用Maybe a
例如:
fmap show (Just 1)
result is : Just "1"
和说的一样:
Just (show 1)
但当(->)
用作函子时(在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
呢?