
On 10/3/07, Tiago Miguel Laureano Alves
Imagine that I have the following functions f :: a -> b -> c -> d g :: d -> e
I want to compose these two functions such that: (g . f) :: a -> b -> c -> e
Here's a pointfree derivation of the composition function you are talking about: compose g f a b c = g (f a b c) = g ((f a b) c) = (g . (f a b)) c compose g f a b = g . f a b = (.) g (f a b) = ((.) g) ((f a) b) = ((.) g . f a) b compose g f a = ((.) g) . f a = (.) ((.) g) (f a) = ((.) ((.) g) . f) a compose g f = (.) ((.) g) . f = (.) (g .) . f = ((g .) .) . f In ghci: Prelude> :set -fglasgow-exts Prelude> :t ((?g .) .) . ?f ((?g .) .) . ?f :: forall b c a a1 a2. (?g::b -> c, ?f::a2 -> a1 -> a -> b) => a2 -> a1 -> a -> c -- ryan