请执行以下功能:
composeApplicative :: (Applicative f) => f (b -> c) -> f (a -> b) -> f (a -> c)
这样:
(composeApplicative f g) <*> x == f <*> (g <*> x)
或者,解释为什么不能这样做?
答案 0 :(得分:6)
可以这样做:
composeApplicative p q = (.) <$> p <*> q
有关更多信息,请read the documentation for Applicative functors,更具体地说,是组成法。它实际上是一个声明,任何Applicative
实例,composeApplicative f g <*> x
必须始终等于f <*> (g <*> x)
。
作为次要技术说明,在进行等式推理时,方程的左侧和右侧必须用单个等号(=
)分隔。双等号(==
)保留给decidable runtime equality checks。