- Types, classes and concepts discusses Haskell types and type classes and how they provide parametric polymorphism and constrain types through class declarations and instance declarations. It also discusses how C++ uses templates for parametric polymorphism but lacks type classes.
- Concepts were proposed for C++ to specify type constraints but were dropped from C++11. Concepts lite were introduced in C++14 as template constraints to check types at use.
- The document proposes implementing type classes in C++ using static asserts, template constraints to check for type class instances, type class definitions, and SFINAE to check for function existence. This would allow constraining template arguments and functions to types that satisfy type class constraints.