【发布时间】:2012-05-04 20:59:55
【问题描述】:
Functor中fmap的类型是:
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)
但当(->) 用作函子时(在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?
【问题讨论】: