A type-indexed value that allows one to compare (and for generating error messages, serialize) values of the type in question.
One of the type parameters is a phantom parameter used to distinguish comparators potentially built on different comparison functions. In particular, we want to distinguish those using polymorphic compare and those using a monomorphic compare.