组合应用函数
Composing applicative functions
请实现函数:
composeApplicative :: (Applicative f) => f (b -> c) -> f (a -> b) -> f (a -> c)
这样:
(composeApplicative f g) <*> x == f <*> (g <*> x)
或者,解释为什么不能这样做?
可以做到:
composeApplicative p q = (.) <$> p <*> q
有关更多信息,read the documentation for Applicative functors,更具体地说,是组成法则。这实际上是一个声明,任何 Applicative
实例,composeApplicative f g <*> x
必须始终等于 f <*> (g <*> x)
.
作为一个小技术说明,在进行等式推理时,等式的左右两边必须用一个等号分隔 (=
)。双等号 (==
) 保留给 decidable runtime equality checks.
请实现函数:
composeApplicative :: (Applicative f) => f (b -> c) -> f (a -> b) -> f (a -> c)
这样:
(composeApplicative f g) <*> x == f <*> (g <*> x)
或者,解释为什么不能这样做?
可以做到:
composeApplicative p q = (.) <$> p <*> q
有关更多信息,read the documentation for Applicative functors,更具体地说,是组成法则。这实际上是一个声明,任何 Applicative
实例,composeApplicative f g <*> x
必须始终等于 f <*> (g <*> x)
.
作为一个小技术说明,在进行等式推理时,等式的左右两边必须用一个等号分隔 (=
)。双等号 (==
) 保留给 decidable runtime equality checks.