Hello,

I tried to create a type class for making instances of Show display a
custom way.  After using my class for a while I found that sometimes
RealFloats would display as 'NaN' and this is unacceptable.  So at
this point I had something like:

{-# OPTIONS_GHC -fglasgow-exts -fallow-undecidable-instances
-fallow-overlapping-instances #-}
class Show a => StringValue a where
 -- | Convert a showable value to a string
 toString :: a -> String

instance Num a => StringValue a where
 toString = show

and I added an instance for RealFloat:

instance RealFloat a => StringValue a where
 toString x
   | isNaN x = "" -- as an example
   | otherwise = show x

Now, I get the error:
   Duplicate instance declarations:
     instance [overlap ok] (Num a) => StringValue a
        -- Defined at ...
     instance [overlap ok] (RealFloat a) => StringValue a
        -- Defined at ...

I've also tried spliting Num into an instance for Integral and
RealFloat but that doesn't work either (same error).

For now I'm using an instance for RealFloat and an instance for Int
and Integer (which are identical) and that seems to be okay but
suboptimal.

Why does the error say they are duplicates?  I would have expected
something about them overlapping but not duplicates.   Is there a way
to still do this without duplicates?

Thanks,
Jason
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to