/poly

Hindley-Milner type system with extensible records and variants, implemented in Go

Primary LanguageGoMIT LicenseMIT

package poly

import "github.com/wdamron/poly"

poly provides inference for a polymorphic type-system with extensible records and variants.

The type-system is an extension of Hindley-Milner based on Daan Leijen's paper: Extensible Records with Scoped Labels (Microsoft Research).

The core of the implementation is based on an OCaml library by Tom Primozic.

Supported Features

  • Extensible records and variants with scoped labels
  • Generic type classes, constructor classes, and parametric overloading
  • Limited/explicit (type class) subtyping with multiple inheritance
  • Mutually-recursive (generic) function expressions within grouped let bindings
  • Mutually-recursive (generic) data types
  • Transparently aliased (generic) types
  • Control-flow graph expressions
  • Mutable references with the value restriction
  • Size-bound type variables

More Info