我想知道这是如何运作的。
x 9001 = True
x _ = False
g 42 = True
g _ = False
(liftA2 (||) x g) 42 = True
liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
x :: (Eq a, Num a) => a -> Bool
g :: (Eq a, Num a) => a -> Bool
x和g的类型(a - > Bool)如何对应liftA2的预期(f a)?
答案 0 :(得分:4)
请记住,match: 1
match: 2
是((->) a)
(也称为读者monad),因此Monad
也是Applicative
。取from the source for base
instance Applicative ((->) a) where
pure = const
(<*>) f g x = f x (g x)
然后,liftA2 (||) x g
是(Num a, Eq a) => a -> Bool
类型的函数,用于检查将参数应用于x
和g
的结果中的任何一个是True
。