[Haskell-cafe] type class question
Derek Elkins
derek.a.elkins at gmail.com
Mon May 21 20:16:20 EDT 2007
Tim Docker wrote:
> I think this must almost be a FAQ, or at least a PAQ (Previously AQ)...
>
> If I have a type class for conversion to a type X:
>
> class XType a where
> toX :: a -> X
>
> I can define instances for
>
> instance XType Int where toX = ...
> instance XType Double where toX = ...
> instance XType Tuple where toX = ...
>
> but not for Strings, given that they are a synonym for [Char]. Hence:
>
> 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'
>
> Is there some type class cleverness that can make this work in haskell
> 98? I can create a new wrapper type for strings:
>
> newtype StringWrap = StringWrap String
>
> and write an instance for that, but then I'll have to litter my code
> with calls to this constructor.
>
> I'm aware of the approach taken by class Show in the prelude, which
> adds a extra method to the class:
>
> class XType a where
> toX :: a -> X
> listToX :: [a] -> X
>
> but I believe this says that whenever we can convert a to an X we can
> also
> convert [a] to an X, whereas I only want [Char] to be acceptable.
I believe there is a trick where essentially you end up with,
instance IsChar a => XType [a] where ...
More information about the Haskell-Cafe
mailing list