
Thanks for the portable solution.
I'd also like to know how is the following different from
-XFlexibleInstances with [Char]? Stronger, weaker, same thing?
{-# OPTIONS -XTypeSynonymInstances #-}
class Stringable a where
toString :: a -> String
instance Stringable String where
toString = id
--A
On Wed, Oct 15, 2008 at 10:16 AM, Ryan Ingram
So, the Haskell98 solution to this is:
class StringableList a where listToString :: [a] -> String
-- now [a] is of the proper form; T = [], a is a type variable instance StringableList a => Stringable [a] where toString = listToString
-- now to make an instance for Stringable [Char] -- we just make an instance for StringableList Char instance StringableList Char where listToString = id
I think "FlexibleInstances" just makes the compiler jump through these hoops instead of you.
-- ryan
On Wed, Oct 15, 2008 at 3:20 AM, George Pollard
wrote: I'm a little confused. Why is this allowed:
data Blah = Blah
instance Eq Blah where x == y = True
But not this:
class Stringable a where toString :: a -> String
instance Stringable [Char] where toString = id
(Resulting in:)
Illegal instance declaration for `Stringable [Char]' (All instance types must be of the form (T a1 ... an) where a1 ... an are distinct type *variables* Use -XFlexibleInstances if you want to disable this.) In the instance declaration for `Stringable [Char]'
'Blah' isn't a type variable, is it? Is my brain just not working right today?
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe