HM type system
E807599
The HM type system is a classical polymorphic type system used in many functional programming languages, known for its ability to infer the most general types without requiring explicit type annotations.
Statements (49)
| Predicate | Object |
|---|---|
| instanceOf |
polymorphic type system
ⓘ
type system ⓘ |
| alsoKnownAs |
Damas–Milner type system
NERFINISHED
ⓘ
Hindley–Milner type system NERFINISHED ⓘ |
| applicationDomain |
compiler design
ⓘ
functional programming languages ⓘ program verification ⓘ |
| basedOn |
lambda calculus
NERFINISHED
ⓘ
simply typed lambda calculus with polymorphism ⓘ |
| coreConcept |
generalization and instantiation of types
ⓘ
polymorphic let-binding ⓘ type schemes ⓘ |
| ensures | type safety for well-typed programs in its language fragment ⓘ |
| extendedBy | Damas–Milner type system NERFINISHED ⓘ |
| feature |
completeness for its language fragment
ⓘ
let-polymorphism ⓘ parametric polymorphism ⓘ principal type property ⓘ principal types ⓘ rank-1 polymorphism ⓘ soundness ⓘ type inference ⓘ |
| formalizedBy | Luis Damas NERFINISHED ⓘ |
| generalizes | simply typed lambda calculus ⓘ |
| inferenceAlgorithm |
Algorithm W
NERFINISHED
ⓘ
unification-based type inference ⓘ |
| influenced |
type system of Elm
ⓘ
type system of F# ⓘ type system of Haskell ⓘ type system of ML-family languages ⓘ type system of PureScript NERFINISHED ⓘ |
| namedAfter |
J. Roger Hindley
NERFINISHED
ⓘ
Robin Milner NERFINISHED ⓘ |
| property |
decidable type inference
ⓘ
principal type can be computed ⓘ |
| restriction |
no higher-kinded types in the original system
ⓘ
no higher-rank polymorphism beyond rank 1 ⓘ no subtyping in the original system ⓘ no type classes in the original system ⓘ |
| supports |
automatic type inference without annotations
ⓘ
most general unifier based inference ⓘ |
| usedIn |
Elm (core subset)
NERFINISHED
ⓘ
F# (core subset) NERFINISHED ⓘ Haskell (core subset) NERFINISHED ⓘ ML NERFINISHED ⓘ OCaml NERFINISHED ⓘ PureScript (core subset) NERFINISHED ⓘ Standard ML NERFINISHED ⓘ |
| yearFormalized | 1984 ⓘ |
Referenced by (1)
Full triples — surface form annotated when it differs from this entity's canonical label.