Requires implementation of (basic) type classes. Being able to type expressions like `int + float` depends on this.