为什么使用fmap的中缀同义词< $>为此表达式返回不同的类型?

时间:2016-07-10 11:44:01

标签: haskell

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数据构造函数或其他东西的重要性是什么?

1 个答案:

答案 0 :(得分:2)

中缀运算符的优先级始终低于函数应用程序,因此(+2) <$> Just 2(+2) <$> (Just 2)相同,因此(<$>) (+2) (Just 2)。如果您使用fmap作为中缀运算符:

(+2) `fmap` Just 2

你会得到相同的结果。