[Haskell-cafe] A voyage of undiscovery

Bernie Pope florbitous at gmail.com
Fri Jul 17 02:58:36 EDT 2009

2009/7/17 Andrew Coppin <andrewcoppin at btinternet.com>:
> I've been working hard this week, and I'm stumbled upon something which is
> probably of absolutely no surprise to anybody but me.
> Consider the following expression:
>  (foo True, foo 'x')
> Is this expression well-typed?
> Astonishingly, the answer depends on where "foo" is defined. If "foo" is a
> local variable, then the above expression is guaranteed to be ill-typed.
> However, if we have (for example)
>  foo :: x -> x
> as a top-level function, then the above expression becomes well-typed.

Some useful reading material:

Section 22.7 of the book "Types and Programming Languages" by Benjamin Pierce.

The classic paper "Basic Polymorphic Typechecking" by Luca Cardelli:

Both of these are very readable introductions to the let-style
polymorphism found in the Hindley/Milner type system. Haskell's type
system is essentially an elaboration of that idea.

Pierce's book shows how to achieve let-polymorphism by inlining
non-recursive let bindings during type checking/inference, which is a
nice way to understand what is going on.

More information about the Haskell-Cafe mailing list