>f (i:is) = even i : f is
>f e = e
This still makes perfect sense to me... you see the let binding:
let [EMAIL PROTECTED] = e
has no additional information about the type of [] so it must be fully
polymorphic.
if the function binding we know typeOf e == typeOf (i:is) and that
i is a member of the class Integral (from the application of even)
As we always take the most precise available type we end up with
forall a. Integral a => [a]
as the type for 'e'... Now Bool is not a member of Integral so
it is a type error!
Keean.
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe