Data.Set and instance Read (Set a)

Otakar Smrz otakar.smrz at mff.cuni.cz
Wed Jun 20 21:12:17 EDT 2007


Dear library maintainers,

I have come across a conflict with the Data.Set library, namely that 
its definition of the instance of Read assumes the default instance 
for reading lists:

instance (Read a, Ord a) => Read (Set a) where

  readsPrec p = readParen (p > 10) $ \ r -> do
    ("fromList",s) <- lex r
    (xs,t) <- reads s
    return (fromList xs,t)


The conflict arises when I define my own instance for reading a 
non-polymorphic list, like in:

instance Read [SomeType] 


Then Hugs protests that:

ERROR file:{Hugs}\packages\base\Data\Set.hs:542 - Cannot justify 
constraints in instance member binding
*** Expression    : readsPrec
*** Type          : Read (Set a) => Int -> ReadS (Set a)
*** Given context : Read (Set a)
*** Constraints   : Read [a]


Fortunately, I do not need the Data.Set library, and can prevent the 
problem by an explicit empty import:

import Data.Set ()


However, a simple fix for it might be welcome by others as well:

instance (Read a, Read [a], Ord a) => Read (Set a) where ...


Thanks for you attention.


Best regards,

Otakar Smrz


More information about the Libraries mailing list