Prelude> :t (+2) <$> Just 2
(+2) <$> Just 2 :: Num b => Maybe b
Prelude> :t fmap (+2) Just 2
fmap (+2) Just 2 :: (Num (Maybe t), Num t) => Maybe t
但是,如果我在Maybe类型周围添加括号,我会得到预期相同的结果:
Prelude> :t fmap (+2) (Just 2)
fmap (+2) (Just 2) :: Num b => Maybe b
所以我的问题是为什么 - Maybe数据构造函数或其他东西的重要性是什么?
答案 0 :(得分:2)
中缀运算符的优先级始终低于函数应用程序,因此(+2) <$> Just 2
与(+2) <$> (Just 2)
相同,因此(<$>) (+2) (Just 2)
。如果您使用fmap
作为中缀运算符:
(+2) `fmap` Just 2
你会得到相同的结果。