
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