我们有签名:
(<$>) :: Functor f => (a -> b) -> f a -> f b
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
让我们试着玩一下:
(/) <$> Just 5 <*> Just 2
=> Just 2.5
((/) <$> Just 5 ) <*> Just 2
=> Just 2.5
( Just (\x -> 5/x ) ) <*> Just 2
=> Just 2.5
Question:
((/) <$> Just 5) <*> Just 2
^^^^^^^^^^^^^^^^ @@@@@@
(<$>) :: Functor f => (a -> b) -> f a -> f b
^^^
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
^^^^^^^^^^ @@@
我理解应该按照类型匹配 ^^^ 部分。为什么 <$>
的返回类型在签名中不会与 <*>
的输入类型视觉上匹配呢?
我在这里漏掉了什么?谢谢。
(/)
的类型,然后确定a
和b
是什么。记住函数是柯里化的。 - Robin Zigmond