
On Jan 9, 2008 12:39 AM, Achim Schneider
Yes, exactly that wire which isn't obscured by the boiler plate has kindled my interest.
The name of a type variable doesn't really matter. GHC tries to preserve the names you give, otherwise it creates their own. For example, Prelude> :t \a b c d e f g -> (a,b,c,d,e,f,g) \a b c d e f g -> (a,b,c,d,e,f,g) :: t -> t1 -> t2 -> t3 -> t4 -> t5 -> t6 -> (t, t1, t2, t3, t4, t5, t6) Welll, so why 'b'? Well, GHC didn't choose 'b' at all =) Prelude> :t let y f = f (y f) in y let y f = f (y f) in y :: (t -> t) -> t but Prelude> :t let y f = f $ y f in y let y f = f $ y f in y :: (b -> b) -> b because Prelude> :t ($) ($) :: (a -> b) -> a -> b In another exemple, Prelude> :t \a b c d e f g -> (id a,b,c,d,e,f,g) \a b c d e f g -> (id a,b,c,d,e,f,g) :: a -> t -> t1 -> t2 -> t3 -> t4 -> t5 -> (a, t, t1, t2, t3, t4, t5) Prelude> :t \a b c d e f g -> (a,b,c,d,id e,f,g) \a b c d e f g -> (a,b,c,d,id e,f,g) :: t -> t1 -> t2 -> t3 -> a -> t4 -> t5 -> (t, t1, t2, t3, a, t4, t5) Prelude> :t \a b c d e f g -> (a,b,id c,d,id e,f,g) \a b c d e f g -> (a,b,id c,d,id e,f,g) :: t -> t1 -> a -> t2 -> a1 -> t3 -> t4 -> (t, t1, a, t2, a1, t3, t4) -- Felipe.