気をつけて、スポイラー!以下で完全な証明を説明します。自分で試してみたい場合は、@nponeccop のアドバイスに従い、関数呼び出しを拡張してみてください ;)
証拠
知っています:
f . g = \x -> f (g x)
pair :: (a -> b, a -> c) -> a -> (b, c)
pair (f, g) x = (f x, g x)
また、中置合成演算子.
は関数適用よりも優先順位が低いため、次のことがわかります。
pair (f, g) . h
= (pair (f, g)) . h -- explicit precedence
= \x -> (pair (f, g)) (h x) -- expanding the composition operator
= \x -> (f (h x), g (h x)) -- expanding 'pair'
= \x -> ((f . h) x, (g . h) x) -- using the composition operator
= \x -> pair (f . h, g . h) x -- back to 'pair'
= pair (f . h, g . h)
私がブーブーをしなかった場合はQED ...これが役に立てば幸いです!