Haskell 将liftA2与函数一起使用

Haskell 将liftA2与函数一起使用,haskell,Haskell,我想知道这是怎么回事 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

我想知道这是怎么回事

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所期望的(fa)?

记住
((->)a)
是一个
单子(也称为读卡器单子),因此也是一个
应用程序。采取

实例应用程序((->)a)其中
纯=常数
()fgx=fx(gx)

然后,
liftA2(| |)xg
是类型
(Num a,Eq a)=>a->Bool
的函数,用于检查将参数应用于
x
g
的结果是否为

可能的重复(提示:记住
lifta2fxy=fxy
,注意这里涉及的
Applicative
实例就是函数的实例。)好的。谢谢。还没有读过reader monad一章。不知道他们为什么在没有介绍的情况下给出它作为示例。
instance Applicative ((->) a) where
  pure = const
  (<*>) f g x = f x (g x)