[Haskell-cafe] type inference question
noteed at gmail.com
Thu Oct 8 05:04:35 EDT 2009
I'd like to know what are the typing rules used in Haskell (98 is ok).
Specifically, I'd like to know what makes
let i = \x -> x in (i True, i 1)
legal, and not
let a = 1 in (a + (1 :: Int), a + (1.0 :: Float))
Is it correct that polymorphic functions can be used polymorphically
(in multiple places) while non-functions receive a monomorphic type ?
Also, I'd like to know why
id id True
is permitted but not
(\f -> f f True) id
Is it possible to change the later expression so it type checks ? Are
there any type inference algorithms that would accept it ?
I'm asking this because I have implemented a simple type inference
algorithm following PLAI and I can infer the type for id id True
(because I use fresh type variable names for id whenever I apply it
before unification) and have an occur check fail for the later
expression, just like in haskell.
More information about the Haskell-Cafe