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
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to