Inferno.Generalization
This module provides machinery to deal with Hindley-Milner polymorphism. It takes care of creating and instantiating schemes, and does so in an efficient way. It is parameterized with the structure S
. On top of it, it adds its own structure, because it needs every unification variable to carry extra information related to generalization. Thus, it wraps the user-specified structure S
in a richer structure Data
, and sets up a unifier U
that works with this data. It provides an abstract representation of Hindley-Milner schemes, together with several operations that allow constructing, inspecting, and instantiating schemes.