While it is really difficult to obtain a correct type signature for `mul` and other operators, `min` and `max` seem simple to implement and useful.