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.

All labels observed (1)

Label Occurrences
HM type system canonical 1

How this entity was disambiguated

Statements (49)

Predicate Object
instanceOf polymorphic type system ⓘ
type system ⓘ
alsoKnownAs Damas–Milner type system ⓘ
Hindley–Milner type system ⓘ
applicationDomain compiler design ⓘ
functional programming languages ⓘ
program verification ⓘ
basedOn lambda calculus ⓘ
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 ⓘ
feature completeness for its language fragment ⓘ
let-polymorphism ⓘ
parametric polymorphism ⓘ
principal type property ⓘ
principal types ⓘ
rank-1 polymorphism ⓘ
soundness ⓘ
type inference ⓘ
formalizedBy Luis Damas ⓘ
generalizes simply typed lambda calculus ⓘ
inferenceAlgorithm Algorithm W ⓘ
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 ⓘ
linked to: PureScript
namedAfter J. Roger Hindley ⓘ
Robin Milner ⓘ
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) ⓘ
linked to: Elm

F# (core subset) ⓘ
linked to: F#

Haskell (core subset) ⓘ
linked to: Haskell

ML ⓘ
OCaml ⓘ
PureScript (core subset) ⓘ
linked to: purescript-prelude

Standard ML ⓘ
yearFormalized 1984 ⓘ

How these facts were elicited

Referenced by (1)

Full triples — surface form annotated when it differs from this entity's canonical label.