说,
f :: a -> b
g :: b -> c
h :: c -> d
为什么等式
h.(g.f) = (h.g).f
是对的? 怎么证明呢? 组合操作只是Haskell中的基本操作, 或者我们可以自己买一个?如果是这样,如何实现呢?
答案 0 :(得分:4)
您可以自己定义合成运算符,如下所示:
(.) :: (b -> c) -> (a -> b) -> a -> c
g . f = \x -> g (f x)
现在,要证明相关性:
lhs = h . (g . f)
= \x -> h ((g . f) x) -- substitution
= \x -> h ((\y -> g (f y)) x) -- substitution
= \x -> h (g (f x)) -- beta reduction
rhs = (h . g) . f
= \x -> (h . g) (f x) -- substitution
= \x -> (\y -> h (g y)) (f x) -- substitution
= \x -> h (g (f x)) -- beta reduction
现在,我们有lhs = rhs
。 QED。