Abstract and Concrete Type Classes

Type classes can be abstract such that new instances may not be added (giving a closed, fixed predicate of general arity over types) or concrete with the possibility of users adding new types to the family (extending the extension of the predicate).