a rule that a value can be checked against, to determine whether it passes or fails
allows values failing the type constraint to be converted to another value that passes
a pattern for constructing new type constraint objects
allows a string of code to be generated to check a given variable


a common interface for type constraints, based on observed patterns (documentation only)