[Haskell-cafe] Is "let" special?
ryani.spam at gmail.com
Wed Nov 3 14:04:22 EDT 2010
2010/11/3 Petr Pudlak <deb at pudlak.name>:
> However, from the typing point of view, it makes quite a difference. It is
> an integral part of the Hindley-Milner type inference algorithm, which is
> used by many functional languages. Consider the following two expressions:
>> f = (\x -> x x) (\y -> y)
>> g = let x = \y -> y in x x
> The function "f" is not typable in the Hindley-Milner type system, while "g"
> is is (and its type is "a -> a"). The reason is that in the first case (f),
> the typing system tries to assign a single type to "x", which is impossible
> (one would have to unify types "a" and "a -> b"). In the second case (g),
> the typing system assigns "x" a polymorphic type schema
> forall a.a -> a
> which can be instantiated to both "a -> a" (the second "x") and "(b -> b) ->
> (b -> b)" (the first "x"), and then applied together. I'd say that "let ...
> in ..." is a core feature of the language that gives us parametric
Although this decision is not without problems. See the recent paper
"Let should not be generalised" 
 Let should not be generalised, Dimitrios Vytiniotis, Simon Peyton
Jones, and Tom Schrijvers; submitted to TLDI 2010.
More information about the Haskell-Cafe