In thinking about various issues with the numeric classes, I came up with the following question: Is there a problem with having a class 'Convertible' as follows? class Convertible a b where convert :: a -> b So, e.g., fromInteger and fromRational could be replaced with convert. (But if you did the same thing with toInteger and toRational as well, you run into problems of overlapping instances. I think there are good semantic reasons for this: fromInteger and fromRational can be defined in terms of the basic +,*,zero,one, while toInteger and toRational rely on details of the representation.) What do people think of this idea in general? Perhaps a better name would be 'Subtype'? Note that "convert . convert" would be up there with "show . read" as an ambiguous term. Best, Dylan Thurston