
Tim,
If I have a type class for conversion to a type X:
class XType a where toX :: a -> X
[...]
instance XType String where toX = ...
results in:
Illegal instance declaration for `XType String' (The instance type must be of form (T a b c) where T is not a synonym, and a,b,c are distinct type variables) In the instance declaration for `XType String'
In addition to Derek's pointer, you could also consider extending the class definition: class XType a where toX :: a -> X listToX :: [a] -> X listToX = ... -- some default definition for listToX Of course, it depends on your type X whether a suitable default definition for listToX can be given. Assuming that it can, you can now, as before, have instance XType Int where toX = ... instance XType Double where toX = ... instance XType Tuple where toX = ... but also instance XType Char where toX c = ... -- your toX implementation for Char listToX s = ... -- your toX implementation for String This 'trick' is used in the standard libraries to accommodate a Show instance for String, for instance. Cheers, Stefan