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)