The Wayback Machine - http://web.archive.org/web/20211101220309/https://amulet.works/
A darn rootin' tootin' language
Amulet is a simple, modern programming language based on the long tradition of the ML family, bringing improvements from the cutting-edge of programming language research.
Amulet's type system supports many advanced features, including but not limited to:
Generalised Algebraic Data Types (GADTs),
Multi-parameter type classes with associated types and functional dependencies, including support for quantified constraints,
Type functions supporting dependent kinds, and equality constraints,
Rank-N, impredicative types via Quick Look: ∀ quantifiers can appear anywhere in a type, not only the top-level,
Principled, extensible records via row polymorphism support inference of principal types.
Type functions let the programmer express complex invariants in a functional language rather than trying to wrangle type-level prolog.
Functions at the type level are defined by pattern matching and compute by β-reduction, much like at the value level.
A powerful termination checker ensures that your type-level functions won't send the type checker into a tailspin. Even then, the type checker has resource limits to ensure it does not run away.