Change definitions of Read1 and Show1 to allow correct list instances
authorRoss Paterson <ross@soi.city.ac.uk>
Wed, 16 Dec 2015 00:01:44 +0000 (00:01 +0000)
committerRoss Paterson <ross@soi.city.ac.uk>
Wed, 16 Dec 2015 00:01:44 +0000 (00:01 +0000)
The Read1 and Show1 classes did not allow special cases for lists as
supported by the base classes Read and Show.  Thus for example the
following displayed incorrectly:

Backwards "abc"
Compose (Just "abc")

see also https://ghc.haskell.org/trac/ghc/ticket/11135

To fix this requires an extra argument to the methods in Read1 and Show1,
effectively taking explicit dictionaries with two entries, like the base
classes.

15 files changed:
Control/Applicative/Backwards.hs
Control/Applicative/Lift.hs
Control/Monad/Trans/Error.hs
Control/Monad/Trans/Except.hs
Control/Monad/Trans/Identity.hs
Control/Monad/Trans/List.hs
Control/Monad/Trans/Maybe.hs
Control/Monad/Trans/Writer/Lazy.hs
Control/Monad/Trans/Writer/Strict.hs
Data/Functor/Classes.hs
Data/Functor/Compose.hs
Data/Functor/Constant.hs
Data/Functor/Product.hs
Data/Functor/Reverse.hs
Data/Functor/Sum.hs

index adae0c1..b90452f 100644 (file)
@@ -44,12 +44,12 @@ instance (Ord1 f) => Ord1 (Backwards f) where
     compareWith comp (Backwards x) (Backwards y) = compareWith comp x y
 
 instance (Read1 f) => Read1 (Backwards f) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith rp) "Backwards" Backwards
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith rp rl) "Backwards" Backwards
 
 instance (Show1 f) => Show1 (Backwards f) where
-    showsPrecWith sp d (Backwards x) =
-        showsUnaryWith (showsPrecWith sp) "Backwards" d x
+    showsPrecWith sp sl d (Backwards x) =
+        showsUnaryWith (showsPrecWith sp sl) "Backwards" d x
 
 instance (Eq1 f, Eq a) => Eq (Backwards f a) where (==) = eq1
 instance (Ord1 f, Ord a) => Ord (Backwards f a) where compare = compare1
index ff48ad3..f6e08bc 100644 (file)
@@ -54,14 +54,14 @@ instance (Ord1 f) => Ord1 (Lift f) where
     compareWith comp (Other y1) (Other y2) = compareWith comp y1 y2
 
 instance (Read1 f) => Read1 (Lift f) where
-    readsPrecWith rp = readsData $
+    readsPrecWith rp rl = readsData $
         readsUnaryWith rp "Pure" Pure `mappend`
-        readsUnaryWith (readsPrecWith rp) "Other" Other
+        readsUnaryWith (readsPrecWith rp rl) "Other" Other
 
 instance (Show1 f) => Show1 (Lift f) where
-    showsPrecWith sp d (Pure x) = showsUnaryWith sp "Pure" d x
-    showsPrecWith sp d (Other y) =
-        showsUnaryWith (showsPrecWith sp) "Other" d y
+    showsPrecWith sp d (Pure x) = showsUnaryWith sp "Pure" d x
+    showsPrecWith sp sl d (Other y) =
+        showsUnaryWith (showsPrecWith sp sl) "Other" d y
 
 instance (Eq1 f, Eq a) => Eq (Lift f a) where (==) = eq1
 instance (Ord1 f, Ord a) => Ord (Lift f a) where compare = compare1
index 9830f02..2d3b660 100644 (file)
@@ -172,12 +172,12 @@ instance (Ord e, Ord1 m) => Ord1 (ErrorT e m) where
     compareWith comp (ErrorT x) (ErrorT y) = compareWith (compareWith comp) x y
 
 instance (Read e, Read1 m) => Read1 (ErrorT e m) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith (readsPrecWith rp)) "ErrorT" ErrorT
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith' (readsPrecWith rp rl)) "ErrorT" ErrorT
 
 instance (Show e, Show1 m) => Show1 (ErrorT e m) where
-    showsPrecWith sp d (ErrorT m) =
-        showsUnaryWith (showsPrecWith (showsPrecWith sp)) "ErrorT" d m
+    showsPrecWith sp sl d (ErrorT m) =
+        showsUnaryWith (showsPrecWith' (showsPrecWith sp sl)) "ErrorT" d m
 
 instance (Eq e, Eq1 m, Eq a) => Eq (ErrorT e m a) where (==) = eq1
 instance (Ord e, Ord1 m, Ord a) => Ord (ErrorT e m a) where compare = compare1
index aad3594..0020f91 100644 (file)
@@ -119,12 +119,12 @@ instance (Ord e, Ord1 m) => Ord1 (ExceptT e m) where
         compareWith (compareWith comp) x y
 
 instance (Read e, Read1 m) => Read1 (ExceptT e m) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith (readsPrecWith rp)) "ExceptT" ExceptT
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith' (readsPrecWith rp rl)) "ExceptT" ExceptT
 
 instance (Show e, Show1 m) => Show1 (ExceptT e m) where
-    showsPrecWith sp d (ExceptT m) =
-        showsUnaryWith (showsPrecWith (showsPrecWith sp)) "ExceptT" d m
+    showsPrecWith sp sl d (ExceptT m) =
+        showsUnaryWith (showsPrecWith' (showsPrecWith sp sl)) "ExceptT" d m
 
 instance (Eq e, Eq1 m, Eq a) => Eq (ExceptT e m a) where (==) = eq1
 instance (Ord e, Ord1 m, Ord a) => Ord (ExceptT e m a) where compare = compare1
index 0935945..2d5de80 100644 (file)
@@ -59,12 +59,12 @@ instance (Ord1 f) => Ord1 (IdentityT f) where
     compareWith comp (IdentityT x) (IdentityT y) = compareWith comp x y
 
 instance (Read1 f) => Read1 (IdentityT f) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith rp) "IdentityT" IdentityT
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith rp rl) "IdentityT" IdentityT
 
 instance (Show1 f) => Show1 (IdentityT f) where
-    showsPrecWith sp d (IdentityT m) =
-        showsUnaryWith (showsPrecWith sp) "IdentityT" d m
+    showsPrecWith sp sl d (IdentityT m) =
+        showsUnaryWith (showsPrecWith sp sl) "IdentityT" d m
 
 instance (Eq1 f, Eq a) => Eq (IdentityT f a) where (==) = eq1
 instance (Ord1 f, Ord a) => Ord (IdentityT f a) where compare = compare1
index a76104a..d33f32b 100644 (file)
@@ -57,12 +57,12 @@ instance (Ord1 m) => Ord1 (ListT m) where
     compareWith comp (ListT x) (ListT y) = compareWith (compareWith comp) x y
 
 instance (Read1 m) => Read1 (ListT m) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith (readsPrecWith rp)) "ListT" ListT
+    readsPrecWith _ rl = readsData $
+        readsUnaryWith (readsPrecWith' (const rl)) "ListT" ListT
 
 instance (Show1 m) => Show1 (ListT m) where
-    showsPrecWith sp d (ListT m) =
-        showsUnaryWith (showsPrecWith (showsPrecWith sp)) "ListT" d m
+    showsPrecWith _ sl d (ListT m) =
+        showsUnaryWith (showsPrecWith' (const sl)) "ListT" d m
 
 instance (Eq1 m, Eq a) => Eq (ListT m a) where (==) = eq1
 instance (Ord1 m, Ord a) => Ord (ListT m a) where compare = compare1
index 195757e..0a81914 100644 (file)
@@ -76,12 +76,12 @@ instance (Ord1 m) => Ord1 (MaybeT m) where
     compareWith comp (MaybeT x) (MaybeT y) = compareWith (compareWith comp) x y
 
 instance (Read1 m) => Read1 (MaybeT m) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith (readsPrecWith rp)) "MaybeT" MaybeT
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith' (readsPrecWith rp rl)) "MaybeT" MaybeT
 
 instance (Show1 m) => Show1 (MaybeT m) where
-    showsPrecWith sp d (MaybeT m) =
-        showsUnaryWith (showsPrecWith (showsPrecWith sp)) "MaybeT" d m
+    showsPrecWith sp sl d (MaybeT m) =
+        showsUnaryWith (showsPrecWith' (showsPrecWith sp sl)) "MaybeT" d m
 
 instance (Eq1 m, Eq a) => Eq (MaybeT m a) where (==) = eq1
 instance (Ord1 m, Ord a) => Ord (MaybeT m a) where compare = compare1
index 41d87cf..659c288 100644 (file)
@@ -117,13 +117,13 @@ instance (Ord w, Ord1 m) => Ord1 (WriterT w m) where
         compareWith (compareWith2 comp compare) m1 m2
 
 instance (Read w, Read1 m) => Read1 (WriterT w m) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith (readsPrecWith2 rp readsPrec))
+    readsPrecWith rp = readsData $
+        readsUnaryWith (readsPrecWith' (readsPrecWith2 rp readsPrec))
             "WriterT" WriterT
 
 instance (Show w, Show1 m) => Show1 (WriterT w m) where
-    showsPrecWith sp d (WriterT m) =
-        showsUnaryWith (showsPrecWith (showsPrecWith2 sp showsPrec)) "WriterT" d m
+    showsPrecWith sp d (WriterT m) =
+        showsUnaryWith (showsPrecWith' (showsPrecWith2 sp showsPrec)) "WriterT" d m
 
 instance (Eq w, Eq1 m, Eq a) => Eq (WriterT w m a) where (==) = eq1
 instance (Ord w, Ord1 m, Ord a) => Ord (WriterT w m a) where compare = compare1
index 9d0fbb4..e0c1f93 100644 (file)
@@ -120,13 +120,13 @@ instance (Ord w, Ord1 m) => Ord1 (WriterT w m) where
         compareWith (compareWith2 comp compare) m1 m2
 
 instance (Read w, Read1 m) => Read1 (WriterT w m) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith (readsPrecWith2 rp readsPrec))
+    readsPrecWith rp = readsData $
+        readsUnaryWith (readsPrecWith' (readsPrecWith2 rp readsPrec))
             "WriterT" WriterT
 
 instance (Show w, Show1 m) => Show1 (WriterT w m) where
-    showsPrecWith sp d (WriterT m) =
-        showsUnaryWith (showsPrecWith (showsPrecWith2 sp showsPrec)) "WriterT" d m
+    showsPrecWith sp d (WriterT m) =
+        showsUnaryWith (showsPrecWith' (showsPrecWith2 sp showsPrec)) "WriterT" d m
 
 instance (Eq w, Eq1 m, Eq a) => Eq (WriterT w m a) where (==) = eq1
 instance (Ord w, Ord1 m, Ord a) => Ord (WriterT w m a) where compare = compare1
index d85904a..4319165 100644 (file)
@@ -51,9 +51,12 @@ module Data.Functor.Classes (
     Show2(..), showsPrec2,
     -- * Helper functions
     -- $example
+    -- readsPrecWith',
+    readsPrecWith',
     readsData,
     readsUnaryWith,
     readsBinaryWith,
+    showsPrecWith',
     showsUnaryWith,
     showsBinaryWith,
     -- ** Obsolete helpers
@@ -68,6 +71,7 @@ module Data.Functor.Classes (
 import Control.Applicative (Const(Const))
 import Data.Functor.Identity (Identity(Identity))
 import Data.Monoid (mappend)
+import Text.Show (showListWith)
 
 -- | Lifting of the 'Eq' class to unary type constructors.
 class Eq1 f where
@@ -99,21 +103,24 @@ compare1 = compareWith compare
 
 -- | Lifting of the 'Read' class to unary type constructors.
 class Read1 f where
-    -- | Lift a 'readsPrec' function through the type constructor.
-    readsPrecWith :: (Int -> ReadS a) -> Int -> ReadS (f a)
+    -- | Lift 'readsPrec' and 'readList' functions through the type constructor.
+    readsPrecWith :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (f a)
 
--- | Lift the standard 'readsPrec' function through the type constructor.
+-- | Lift the standard 'readsPrec' and 'readList' functions through the
+-- type constructor.
 readsPrec1 :: (Read1 f, Read a) => Int -> ReadS (f a)
-readsPrec1 = readsPrecWith readsPrec
+readsPrec1 = readsPrecWith readsPrec readList
 
 -- | Lifting of the 'Show' class to unary type constructors.
 class Show1 f where
-    -- | Lift a 'showsPrec' function through the type constructor.
-    showsPrecWith :: (Int -> a -> ShowS) -> Int -> f a -> ShowS
+    -- | Lift 'showsPrec' and 'showList' functions through the type constructor.
+    showsPrecWith :: (Int -> a -> ShowS) -> ([a] -> ShowS) ->
+        Int -> f a -> ShowS
 
--- | Lift the standard 'showsPrec' function through the type constructor.
+-- | Lift the standard 'showsPrec' and 'showList' functions through the
+-- type constructor.
 showsPrec1 :: (Show1 f, Show a) => Int -> f a -> ShowS
-showsPrec1 = showsPrecWith showsPrec
+showsPrec1 = showsPrecWith showsPrec showList
 
 -- | Lifting of the 'Eq' class to binary type constructors.
 class Eq2 f where
@@ -179,14 +186,14 @@ instance Ord1 Maybe where
     compareWith comp (Just x) (Just y) = comp x y
 
 instance Read1 Maybe where
-    readsPrecWith rp d =
+    readsPrecWith rp d =
          readParen False (\ r -> [(Nothing,s) | ("Nothing",s) <- lex r])
          `mappend`
          readsData (readsUnaryWith rp "Just" Just) d
 
 instance Show1 Maybe where
-    showsPrecWith _ _ Nothing = showString "Nothing"
-    showsPrecWith sp d (Just x) = showsUnaryWith sp "Just" d x
+    showsPrecWith _ _ Nothing = showString "Nothing"
+    showsPrecWith sp d (Just x) = showsUnaryWith sp "Just" d x
 
 instance Eq1 [] where
     eqWith _ [] [] = True
@@ -201,21 +208,10 @@ instance Ord1 [] where
     compareWith comp (x:xs) (y:ys) = comp x y `mappend` compareWith comp xs ys
 
 instance Read1 [] where
-    readsPrecWith rp _ = readParen False $ \ r ->
-        [pr | ("[",s)  <- lex r, pr <- readl s]
-      where
-        readl s = [([],t) | ("]",t) <- lex s] ++
-            [(x:xs,u) | (x,t) <- rp 0 s, (xs,u) <- readl' t]
-        readl' s = [([],t) | ("]",t) <- lex s] ++
-            [(x:xs,v) | (",",t) <- lex s, (x,u) <- rp 0 t, (xs,v) <- readl' u]
-
+    readsPrecWith _ rl _ = rl
 
 instance Show1 [] where
-    showsPrecWith _ _ [] = showString "[]"
-    showsPrecWith sp _ (x:xs) = showChar '[' . sp 0 x . showl xs
-      where
-        showl []     = showChar ']'
-        showl (y:ys) = showChar ',' . sp 0 y . showl ys
+    showsPrecWith _ sl _ = sl
 
 instance Eq2 (,) where
     eqWith2 e1 e2 (x1, y1) (x2, y2) = e1 x1 x2 && e2 y1 y2
@@ -243,10 +239,10 @@ instance (Ord a) => Ord1 ((,) a) where
     compareWith = compareWith2 compare
 
 instance (Read a) => Read1 ((,) a) where
-    readsPrecWith = readsPrecWith2 readsPrec
+    readsPrecWith rp _ = readsPrecWith2 readsPrec rp
 
 instance (Show a) => Show1 ((,) a) where
-    showsPrecWith = showsPrecWith2 showsPrec
+    showsPrecWith sp _ = showsPrecWith2 showsPrec sp
 
 instance Eq2 Either where
     eqWith2 e1 _ (Left x) (Left y) = e1 x y
@@ -276,10 +272,10 @@ instance (Ord a) => Ord1 (Either a) where
     compareWith = compareWith2 compare
 
 instance (Read a) => Read1 (Either a) where
-    readsPrecWith = readsPrecWith2 readsPrec
+    readsPrecWith rp _ = readsPrecWith2 readsPrec rp
 
 instance (Show a) => Show1 (Either a) where
-    showsPrecWith = showsPrecWith2 showsPrec
+    showsPrecWith sp _ = showsPrecWith2 showsPrec sp
 
 -- Instances for other functors defined in the base package
 
@@ -290,11 +286,11 @@ instance Ord1 Identity where
     compareWith comp (Identity x) (Identity y) = comp x y
 
 instance Read1 Identity where
-    readsPrecWith rp = readsData $
+    readsPrecWith rp = readsData $
          readsUnaryWith rp "Identity" Identity
 
 instance Show1 Identity where
-    showsPrecWith sp d (Identity x) = showsUnaryWith sp "Identity" d x
+    showsPrecWith sp d (Identity x) = showsUnaryWith sp "Identity" d x
 
 instance Eq2 Const where
     eqWith2 eq _ (Const x) (Const y) = eq x y
@@ -314,12 +310,28 @@ instance (Eq a) => Eq1 (Const a) where
 instance (Ord a) => Ord1 (Const a) where
     compareWith = compareWith2 compare
 instance (Read a) => Read1 (Const a) where
-    readsPrecWith = readsPrecWith2 readsPrec
+    readsPrecWith rp _ = readsPrecWith2 readsPrec rp
 instance (Show a) => Show1 (Const a) where
-    showsPrecWith = showsPrecWith2 showsPrec
+    showsPrecWith sp _ = showsPrecWith2 showsPrec sp
 
 -- Building blocks
 
+-- | Simplified version of 'readsPrecWith' for use when the argument type
+-- is assumed not to have a special version of 'readList'.
+readsPrecWith' :: Read1 f => (Int -> ReadS (g a)) -> Int -> ReadS (f (g a))
+readsPrecWith' rp = readsPrecWith rp (readListWith (rp 0))
+
+-- | Read a list (using square brackets and commas), given a function
+-- for reading elements.
+readListWith :: ReadS a -> ReadS [a]
+readListWith rp =
+    readParen False (\r -> [pr | ("[",s) <- lex r, pr <- readl s])
+  where
+    readl s = [([],t) | ("]",t) <- lex s] ++
+        [(x:xs,u) | (x,t) <- rp s, (xs,u) <- readl' t]
+    readl' s = [([],t) | ("]",t) <- lex s] ++
+        [(x:xs,v) | (",",t) <- lex s, (x,u) <- rp t, (xs,v) <- readl' u]
+
 -- | @'readsData' p d@ is a parser for datatypes where each alternative
 -- begins with a data constructor.  It parses the constructor and
 -- passes it to @p@.  Parsers for various constructors can be constructed
@@ -343,6 +355,11 @@ readsBinaryWith :: (Int -> ReadS a) -> (Int -> ReadS b) ->
 readsBinaryWith rp1 rp2 name cons kw s =
     [(cons x y,u) | kw == name, (x,t) <- rp1 11 s, (y,u) <- rp2 11 t]
 
+-- | Simplified version of 'showsPrecWith' for use when the argument type
+-- is assumed not to have a special version of 'showList'.
+showsPrecWith' :: Show1 f => (Int -> g a -> ShowS) -> Int -> f (g a) -> ShowS
+showsPrecWith' sp = showsPrecWith sp (showListWith (sp 0))
+
 -- | @'showsUnaryWith' sp n d x@ produces the string representation of a
 -- unary data constructor with name @n@ and argument @x@, in precedence
 -- context @d@.
@@ -416,19 +433,19 @@ new algebraic types.  For example, given the definition
 a standard 'Read1' instance may be defined as
 
 > instance (Read1 f) => Read1 (T f) where
->     readsPrecWith rp = readsData $
+>     readsPrecWith rp rl = readsData $
 >         readsUnaryWith rp "Zero" Zero `mappend`
->         readsUnaryWith (readsPrecWith rp) "One" One `mappend`
->         readsBinaryWith rp (readsPrecWith rp) "Two" Two
+>         readsUnaryWith (readsPrecWith rp rl) "One" One `mappend`
+>         readsBinaryWith rp (readsPrecWith rp rl) "Two" Two
 
 and the corresponding 'Show1' instance as
 
 > instance (Show1 f) => Show1 (T f) where
->     showsPrecWith sp d (Zero x) =
+>     showsPrecWith sp d (Zero x) =
 >         showsUnaryWith sp "Zero" d x
->     showsPrecWith sp d (One x) =
->         showsUnaryWith (showsPrecWith sp) "One" d x
->     showsPrecWith sp d (Two x y) =
->         showsBinaryWith sp (showsPrecWith sp) "Two" d x y
+>     showsPrecWith sp sl d (One x) =
+>         showsUnaryWith (showsPrecWith sp sl) "One" d x
+>     showsPrecWith sp sl d (Two x y) =
+>         showsBinaryWith sp (showsPrecWith sp sl) "Two" d x y
 
 -}
index 8f76748..64cb768 100644 (file)
@@ -48,12 +48,12 @@ instance (Ord1 f, Ord1 g) => Ord1 (Compose f g) where
         compareWith (compareWith comp) x y
 
 instance (Read1 f, Read1 g) => Read1 (Compose f g) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith (readsPrecWith rp)) "Compose" Compose
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith' (readsPrecWith rp rl)) "Compose" Compose
 
 instance (Show1 f, Show1 g) => Show1 (Compose f g) where
-    showsPrecWith sp d (Compose x) =
-        showsUnaryWith (showsPrecWith (showsPrecWith sp)) "Compose" d x
+    showsPrecWith sp sl d (Compose x) =
+        showsUnaryWith (showsPrecWith' (showsPrecWith sp sl)) "Compose" d x
 
 -- Instances of Prelude classes
 
index 12de313..ae6a5ff 100644 (file)
@@ -69,9 +69,9 @@ instance (Eq a) => Eq1 (Constant a) where
 instance (Ord a) => Ord1 (Constant a) where
     compareWith = compareWith2 compare
 instance (Read a) => Read1 (Constant a) where
-    readsPrecWith = readsPrecWith2 readsPrec
+    readsPrecWith rp _ = readsPrecWith2 readsPrec rp
 instance (Show a) => Show1 (Constant a) where
-    showsPrecWith = showsPrecWith2 showsPrec
+    showsPrecWith sp _ = showsPrecWith2 showsPrec sp
 
 instance Functor (Constant a) where
     fmap _ (Constant x) = Constant x
index db0899f..aaf0a56 100644 (file)
@@ -47,12 +47,12 @@ instance (Ord1 f, Ord1 g) => Ord1 (Product f g) where
         compareWith comp x1 x2 `mappend` compareWith comp y1 y2
 
 instance (Read1 f, Read1 g) => Read1 (Product f g) where
-    readsPrecWith rp = readsData $
-        readsBinaryWith (readsPrecWith rp) (readsPrecWith rp) "Pair" Pair
+    readsPrecWith rp rl = readsData $
+        readsBinaryWith (readsPrecWith rp rl) (readsPrecWith rp rl) "Pair" Pair
 
 instance (Show1 f, Show1 g) => Show1 (Product f g) where
-    showsPrecWith sp d (Pair x y) =
-        showsBinaryWith (showsPrecWith sp) (showsPrecWith sp) "Pair" d x y
+    showsPrecWith sp sl d (Pair x y) =
+        showsBinaryWith (showsPrecWith sp sl) (showsPrecWith sp sl) "Pair" d x y
 
 instance (Eq1 f, Eq1 g, Eq a) => Eq (Product f g a)
     where (==) = eq1
index a111d87..7e09deb 100644 (file)
@@ -46,12 +46,12 @@ instance (Ord1 f) => Ord1 (Reverse f) where
     compareWith comp (Reverse x) (Reverse y) = compareWith comp x y
 
 instance (Read1 f) => Read1 (Reverse f) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith rp) "Reverse" Reverse
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith rp rl) "Reverse" Reverse
 
 instance (Show1 f) => Show1 (Reverse f) where
-    showsPrecWith sp d (Reverse x) =
-        showsUnaryWith (showsPrecWith sp) "Reverse" d x
+    showsPrecWith sp sl d (Reverse x) =
+        showsUnaryWith (showsPrecWith sp sl) "Reverse" d x
 
 instance (Eq1 f, Eq a) => Eq (Reverse f a) where (==) = eq1
 instance (Ord1 f, Ord a) => Ord (Reverse f a) where compare = compare1
index 1c13845..04940dd 100644 (file)
@@ -47,13 +47,15 @@ instance (Ord1 f, Ord1 g) => Ord1 (Sum f g) where
     compareWith comp (InR y1) (InR y2) = compareWith comp y1 y2
 
 instance (Read1 f, Read1 g) => Read1 (Sum f g) where
-    readsPrecWith rp = readsData $
-        readsUnaryWith (readsPrecWith rp) "InL" InL `mappend`
-        readsUnaryWith (readsPrecWith rp) "InR" InR
+    readsPrecWith rp rl = readsData $
+        readsUnaryWith (readsPrecWith rp rl) "InL" InL `mappend`
+        readsUnaryWith (readsPrecWith rp rl) "InR" InR
 
 instance (Show1 f, Show1 g) => Show1 (Sum f g) where
-    showsPrecWith sp d (InL x) = showsUnaryWith (showsPrecWith sp) "InL" d x
-    showsPrecWith sp d (InR y) = showsUnaryWith (showsPrecWith sp) "InR" d y
+    showsPrecWith sp sl d (InL x) =
+        showsUnaryWith (showsPrecWith sp sl) "InL" d x
+    showsPrecWith sp sl d (InR y) =
+        showsUnaryWith (showsPrecWith sp sl) "InR" d y
 
 instance (Eq1 f, Eq1 g, Eq a) => Eq (Sum f g a) where
     (==) = eq1