[英]Precedence Confusion about <$> and <*> in Haskell
来自http://learnyouahaskell.com/functors-applicative-functors-and-monoids#applicative-functors的两个示例,
1)。 (+) <$> (+3) <*> (*100) $ 5
(+) <$> (+3) <*> (*100) $ 5, the 5 first got applied to (+3) and
(*100), resulting in 8 and 500. Then, + gets called with 8 and 500,
resulting in 508.
从第一个示例来看, <*>
优先级似乎比<$>
优先级高。
2)。 (++) <$> Just "johntra" <*> Just "volta"
(++) <$> Just "johntra" <*> Just "volta", resulting in a value
that's the same as Just ("johntra"++),and now Just ("johntra"++) <*>
Just "volta" happens, resulting in Just "johntravolta".
从第二个示例来看, <$>
优先级似乎比<*>
优先级高。
那么它们具有相同的优先级吗? 有人可以给我一些解释/参考吗?
<$>
和<*>
具有相同的优先级,并且具有左关联性。 $
的最低优先级为零。 您可以使用ghci
探索有关它们的信息:
λ> :i (<$>)
(<$>) :: Functor f => (a -> b) -> f a -> f b
-- Defined in ‘Data.Functor’
infixl 4 <$>
λ> :i (<*>)
class Functor f => Applicative (f :: * -> *) where
...
(<*>) :: f (a -> b) -> f a -> f b
...
-- Defined in ‘Control.Applicative’
infixl 4 <*>
现在,您可以算出类型,以查看它们的类型检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.