Haskell ((>;)r型合成应用律的证明

Haskell ((>;)r型合成应用律的证明,haskell,Haskell,适用法律的构成如下: pure (.) <*> u <*> v <*> w = u <*> (v <*> w) LHS: pure(.)u v w 常量(.)u v w (\f->const(.)f(u f))v w (\f->(。(u f))v w (\g->(\f->(.(uf))g(vg))w \x->(\g->(\f->(.(uf))g(vg))x(wx) --应用于x扩展labmda \x->((\f->(.(uf))x(v

适用法律的构成如下:

pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
LHS:

pure(.)u v w
常量(.)u v w
(\f->const(.)f(u f))v w
(\f->(。(u f))v w
(\g->(\f->(.(uf))g(vg))w
\x->(\g->(\f->(.(uf))g(vg))x(wx)
--应用于x扩展labmda
\x->((\f->(.(uf))x(vx))(wx)
\x->(((ux))(vx))(wx)
\x->((ux)。(vx))(wx--(B)

我不认为(A)和(B)是等价的,那么我在哪里犯了错误?如果有任何帮助或建议,我将不胜感激

你就快到了。您只需要使用
()
的定义,即

(f . g) x = f (g x)

在LHS计算的最后一行中替换了该定义后,应该有两个明显相等的lambda。

您就快到了。您只需要使用
()
的定义,即

(f . g) x = f (g x)

在LHS计算的最后一行中替换该定义后,应该有两个明显相等的lambda。

此问题与。但是,我不能直接将这个问题中的代码作为注释发布,所以我决定添加一个新的后续问题,而不是在LHS最后一行的合成的定义
(f.g)x=f(gx)
中添加替换项。。。你完了!唉。错过了一些非常简单的事情。你能把你的评论作为一个答案发表出来,这样我就可以接受了吗?要更友好地介绍
适用的
法律,请参阅Edward Yang。另外,你可以考虑跳过并证明单子定律。这个问题与…有关。但是,我不能直接将这个问题中的代码作为注释发布,所以我决定添加一个新的后续问题,而不是在LHS最后一行的合成的定义
(f.g)x=f(gx)
中添加替换项。。。你完了!唉。错过了一些非常简单的事情。你能把你的评论作为一个答案发表出来,这样我就可以接受了吗?要更友好地介绍
适用的
法律,请参阅Edward Yang。此外,你可以考虑跳过并证明单子定律。
(f . g) x = f (g x)