Haskell 组合应用函数

Haskell 组合应用函数,haskell,functor,applicative,function-composition,Haskell,Functor,Applicative,Function Composition,请执行以下功能: composeApplicative :: (Applicative f) => f (b -> c) -> f (a -> b) -> f (a -> c) 以便: (composeApplicative f g) <*> x == f <*> (g <*> x) 或者,解释为什么不能这样做?可以这样做: composeApplicative p q = (.) <$> p <*&g

请执行以下功能:

composeApplicative :: (Applicative f) => f (b -> c) -> f (a -> b) -> f (a -> c)
以便:

(composeApplicative f g) <*> x == f <*> (g <*> x)
或者,解释为什么不能这样做?

可以这样做:

composeApplicative p q = (.) <$> p <*> q
更多信息,更具体地说,是合成法。它实际上是一种声明,任何应用实例composeApplicative fGx必须始终等于fGx


作为一个次要的技术说明,在进行等式推理时,等式的左侧和右侧必须用一个等号=。双等号==保留给。

composeApplicative p q=。这是家庭作业吗?你试过什么?我投票决定以离题的方式结束这个问题,因为它很可能是家庭作业,而OP没有表现出任何努力。@Clinton那么,展示你的尝试,并以一种表达你遇到了问题的方式陈述你的问题,而不是简单地询问代码,会不会很困难呢。因为你在这个问题上投入的精力太少,所以你被否决了。@Clinton你可以这么说,但你被否决的事实表明这是个坏主意。请把精力放在一个问题上。作为一个次要的技术说明,在进行等式推理时,等式的左侧和右侧必须用一个等号=。双等号==保留用于可判定的运行时相等性检查。这不是一个共识规则;许多引人注目的Haskeller使用==进行等式推理。甚至GHC文件也没有始终如一地遵循它;参见例如…@LuisCasillas:所采取的观点。但我认为区分平等作为一个命题是有用的,它可能是可判定的,也可能不是可判定的,而平等的判定过程一般不存在于任意类型。