On Jan 9, 2008 12:39 AM, Achim Schneider <[EMAIL PROTECTED]> wrote:
> 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.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to