Question

I remember reading somewhere that Hindley Milner was a restriction on system-f. If that is the case, could someone please provide me with some terms that can be typed in system-f but not in HM.

Was it helpful?

Solution

Anything involving higher-ranked (i.e. "first-class") polymorphism. For example:

lambda f : (forall A. A -> A). (f Int 1, f String "hello")

This function would have the type (forall A. A -> A) -> Int * String, which is not expressible in HM, where all polymorphic type schemes must be in "prenex" form (i.e. the quantifier may only occur on the outside, never nested).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top