Hello community, here is the log from the commit of package ghc-prelude-extras for openSUSE:Factory checked in at 2016-01-21 23:43:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-prelude-extras (Old) and /work/SRC/openSUSE:Factory/.ghc-prelude-extras.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "ghc-prelude-extras" Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-prelude-extras/ghc-prelude-extras.changes 2015-09-17 09:19:30.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ghc-prelude-extras.new/ghc-prelude-extras.changes 2016-01-22 01:08:51.000000000 +0100 @@ -1,0 +2,7 @@ +Mon Jan 18 12:22:55 UTC 2016 - mimi.vx@gmail.com + +- update to 0.4.0.3 +* Add instances for Const +* Add instances for tuples up to 9 + +------------------------------------------------------------------- Old: ---- prelude-extras-0.4.0.2.tar.gz New: ---- prelude-extras-0.4.0.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-prelude-extras.spec ++++++ --- /var/tmp/diff_new_pack.PJcD1l/_old 2016-01-22 01:08:53.000000000 +0100 +++ /var/tmp/diff_new_pack.PJcD1l/_new 2016-01-22 01:08:53.000000000 +0100 @@ -19,7 +19,7 @@ %global pkg_name prelude-extras Name: ghc-prelude-extras -Version: 0.4.0.2 +Version: 0.4.0.3 Release: 0 Summary: Haskell 98 - higher order versions of Prelude classes License: BSD-3-Clause ++++++ prelude-extras-0.4.0.2.tar.gz -> prelude-extras-0.4.0.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/prelude-extras-0.4.0.2/CHANGELOG.markdown new/prelude-extras-0.4.0.3/CHANGELOG.markdown --- old/prelude-extras-0.4.0.2/CHANGELOG.markdown 2015-09-09 16:25:36.000000000 +0200 +++ new/prelude-extras-0.4.0.3/CHANGELOG.markdown 2016-01-17 02:56:58.000000000 +0100 @@ -1,3 +1,8 @@ +0.4.0.3 +------- +* Add instances for `Const` +* Add instances for tuples up to 9 + 0.4.0.2 ------- * Mark `Prelude.Extras` as Trustworthy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/prelude-extras-0.4.0.2/LICENSE new/prelude-extras-0.4.0.3/LICENSE --- old/prelude-extras-0.4.0.2/LICENSE 2015-09-09 16:25:36.000000000 +0200 +++ new/prelude-extras-0.4.0.3/LICENSE 2016-01-17 02:56:58.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright 2011-2014 Edward Kmett +Copyright 2011-2016 Edward Kmett All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/prelude-extras-0.4.0.2/prelude-extras.cabal new/prelude-extras-0.4.0.3/prelude-extras.cabal --- old/prelude-extras-0.4.0.2/prelude-extras.cabal 2015-09-09 16:25:36.000000000 +0200 +++ new/prelude-extras-0.4.0.3/prelude-extras.cabal 2016-01-17 02:56:58.000000000 +0100 @@ -1,6 +1,6 @@ name: prelude-extras category: Polymorphism, Combinators -version: 0.4.0.2 +version: 0.4.0.3 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE @@ -9,7 +9,7 @@ stability: provisional homepage: http://github.com/ekmett/prelude-extras bug-reports: http://github.com/ekmett/prelude-extras/issues -copyright: Copyright (C) 2011-2014 Edward A. Kmett +copyright: Copyright (C) 2011-2016 Edward A. Kmett synopsis: Higher order versions of Prelude classes tested-with: GHC == 7.10.2, GHC == 7.8.4, GHC == 7.6.3, GHC == 7.4.2, GHC == 7.0.4 description: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/prelude-extras-0.4.0.2/src/Prelude/Extras.hs new/prelude-extras-0.4.0.3/src/Prelude/Extras.hs --- old/prelude-extras-0.4.0.2/src/Prelude/Extras.hs 2015-09-09 16:25:36.000000000 +0200 +++ new/prelude-extras-0.4.0.3/src/Prelude/Extras.hs 2016-01-17 02:56:58.000000000 +0100 @@ -1,12 +1,12 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveTraversable #-} -#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ > 702 +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +#if __GLASGOW_HASKELL__ > 702 #define DEFAULT_SIGNATURES {-# LANGUAGE DefaultSignatures #-} #endif -#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 701 +#if __GLASGOW_HASKELL__ >= 701 -- GHC.Conc isn't generally safe, but we're just using TVar {-# LANGUAGE Trustworthy #-} #endif @@ -44,13 +44,16 @@ ) where import Control.Applicative -import Control.Arrow (first) -import Control.Concurrent (Chan, MVar) -import Data.Complex (Complex) import Data.Fixed import Data.IORef (IORef) import Data.Monoid +#if MIN_VERSION_base(4,4,0) +import Data.Complex (Complex) import Data.Ratio (Ratio) +import Control.Concurrent (Chan, MVar) +#else +import Control.Concurrent (MVar) +#endif import Foreign.ForeignPtr (ForeignPtr) import Foreign.Ptr (Ptr, FunPtr) import Foreign.StablePtr (StablePtr) @@ -80,7 +83,7 @@ class Eq1 f where (==#) :: Eq a => f a -> f a -> Bool #ifdef DEFAULT_SIGNATURES - default (==#) :: (Eq (f a), Eq a) => f a -> f a -> Bool + default (==#) :: Eq (f a) => f a -> f a -> Bool (==#) = (==) #endif @@ -88,9 +91,7 @@ a /=# b = not (a ==# b) instance Eq1 Maybe where - Just a ==# Just b = a == b - Nothing ==# Nothing = True - _ ==# _ = False + (==#) = (==) instance Eq a => Eq1 (Either a) where (==#) = (==) @@ -100,7 +101,7 @@ #if MIN_VERSION_base(4,8,0) instance Eq1 Identity where (==#) = (==) -instance Eq1 f => Eq1 (Alt f) where Alt x ==# Alt y = x ==# y +deriving instance Eq1 f => Eq1 (Alt f) #endif #if MIN_VERSION_base(4,7,0) instance Eq1 Proxy where (==#) = (==) @@ -111,6 +112,12 @@ #if MIN_VERSION_base(4,6,0) instance Eq1 Down where (==#) = (==) #endif +#if MIN_VERSION_base(4,8,0) +instance Eq a => Eq1 (Const a) where (==#) = (==) +#else +instance Eq a => Eq1 (Const a) where + Const a ==# Const b = a == b +#endif instance Eq1 Dual where (==#) = (==) instance Eq1 Sum where (==#) = (==) instance Eq1 Product where (==#) = (==) @@ -130,23 +137,48 @@ instance Eq1 Chan where (==#) = (==) #endif +instance Eq a => Eq1 ((,) a) where (==#) = (==) +instance (Eq a, Eq b) => Eq1 ((,,) a b) where (==#) = (==) +instance (Eq a, Eq b, Eq c) => Eq1 ((,,,) a b c) where (==#) = (==) +instance (Eq a, Eq b, Eq c, Eq d) => Eq1 ((,,,,) a b c d) where (==#) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e) => Eq1 ((,,,,,) a b c d e) where (==#) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f) => Eq1 ((,,,,,,) a b c d e f) where (==#) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g) => Eq1 ((,,,,,,,) a b c d e f g) where (==#) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h) => Eq1 ((,,,,,,,,) a b c d e f g h) where (==#) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h, Eq i) => Eq1 ((,,,,,,,,,) a b c d e f g h i) where (==#) = (==) + class Eq2 f where (==##) :: (Eq a, Eq b) => f a b -> f a b -> Bool #ifdef DEFAULT_SIGNATURES - default (==##) :: (Eq (f a b), Eq a, Eq b) => f a b -> f a b -> Bool + default (==##) :: Eq (f a b) => f a b -> f a b -> Bool (==##) = (==) #endif (/=##) :: (Eq2 f, Eq a, Eq b) => f a b -> f a b -> Bool a /=## b = not (a ==## b) -instance Eq2 Either where - (==##) = (==) +instance Eq2 Either where (==##) = (==) + +#if MIN_VERSION_base(4,8,0) +instance Eq2 Const where (==##) = (==) +#else +instance Eq2 Const where Const x ==## Const y = x == y +#endif + +instance Eq2 (,) where (==##) = (==) +instance Eq a => Eq2 ((,,) a) where (==##) = (==) +instance (Eq a, Eq b) => Eq2 ((,,,) a b) where (==##) = (==) +instance (Eq a, Eq b, Eq c) => Eq2 ((,,,,) a b c) where (==##) = (==) +instance (Eq a, Eq b, Eq c, Eq d) => Eq2 ((,,,,,) a b c d) where (==##) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e) => Eq2 ((,,,,,,) a b c d e) where (==##) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f) => Eq2 ((,,,,,,,) a b c d e f) where (==##) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g) => Eq2 ((,,,,,,,,) a b c d e f g) where (==##) = (==) +instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h) => Eq2 ((,,,,,,,,,) a b c d e f g h) where (==##) = (==) class Eq1 f => Ord1 f where compare1 :: Ord a => f a -> f a -> Ordering #ifdef DEFAULT_SIGNATURES - default compare1 :: (Ord (f a), Ord a) => f a -> f a -> Ordering + default compare1 :: Ord (f a) => f a -> f a -> Ordering compare1 = compare #endif @@ -171,7 +203,7 @@ instance Ord1 [] where compare1 = compare #if MIN_VERSION_base(4,8,0) instance Ord1 Identity where compare1 = compare -instance Ord1 f => Ord1 (Alt f) where compare1 (Alt x) (Alt y) = compare1 x y +deriving instance Ord1 f => Ord1 (Alt f) #endif #if MIN_VERSION_base(4,7,0) instance Ord1 Proxy where compare1 = compare @@ -182,6 +214,12 @@ #if MIN_VERSION_base(4,6,0) instance Ord1 Down where compare1 = compare #endif +#if MIN_VERSION_base(4,8,0) +instance Ord a => Ord1 (Const a) where compare1 = compare +#else +instance Ord a => Ord1 (Const a) where + compare1 (Const x) (Const y) = compare x y +#endif instance Ord1 Dual where compare1 = compare instance Ord1 Sum where compare1 = compare instance Ord1 Product where compare1 = compare @@ -192,6 +230,16 @@ instance Ord1 ForeignPtr where compare1 = compare instance Ord1 Fixed where compare1 = compare +instance Ord a => Ord1 ((,) a) where compare1 = compare +instance (Ord a, Ord b) => Ord1 ((,,) a b) where compare1 = compare +instance (Ord a, Ord b, Ord c) => Ord1 ((,,,) a b c) where compare1 = compare +instance (Ord a, Ord b, Ord c, Ord d) => Ord1 ((,,,,) a b c d) where compare1 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord1 ((,,,,,) a b c d e) where compare1 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f) => Ord1 ((,,,,,,) a b c d e f) where compare1 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g) => Ord1 ((,,,,,,,) a b c d e f g) where compare1 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h) => Ord1 ((,,,,,,,,) a b c d e f g h) where compare1 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i) => Ord1 ((,,,,,,,,,) a b c d e f g h i) where compare1 = compare + -- needs Haskell 2011 -- instance Ord1 Complex where compare1 = compare @@ -199,7 +247,7 @@ class Eq2 f => Ord2 f where compare2 :: (Ord a, Ord b) => f a b -> f a b -> Ordering #ifdef DEFAULT_SIGNATURES - default compare2 :: (Ord (f a b), Ord a, Ord b) => f a b -> f a b -> Ordering + default compare2 :: Ord (f a b) => f a b -> f a b -> Ordering compare2 = compare #endif @@ -224,11 +272,26 @@ | otherwise = y instance Ord2 Either where compare2 = compare +#if MIN_VERSION_base(4,8,0) +instance Ord2 Const where compare2 = compare +#else +instance Ord2 Const where Const x `compare2` Const y = compare x y +#endif + +instance Ord2 (,) where compare2 = compare +instance Ord a => Ord2 ((,,) a) where compare2 = compare +instance (Ord a, Ord b) => Ord2 ((,,,) a b) where compare2 = compare +instance (Ord a, Ord b, Ord c) => Ord2 ((,,,,) a b c) where compare2 = compare +instance (Ord a, Ord b, Ord c, Ord d) => Ord2 ((,,,,,) a b c d) where compare2 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord2 ((,,,,,,) a b c d e) where compare2 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f) => Ord2 ((,,,,,,,) a b c d e f) where compare2 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g) => Ord2 ((,,,,,,,,) a b c d e f g) where compare2 = compare +instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h) => Ord2 ((,,,,,,,,,) a b c d e f g h) where compare2 = compare class Show1 f where showsPrec1 :: Show a => Int -> f a -> ShowS #ifdef DEFAULT_SIGNATURES - default showsPrec1 :: (Show (f a), Show a) => Int -> f a -> ShowS + default showsPrec1 :: Show (f a) => Int -> f a -> ShowS showsPrec1 = showsPrec #endif showList1 :: (Show a) => [f a] -> ShowS @@ -237,14 +300,12 @@ show1 :: (Show1 f, Show a) => f a -> String show1 x = shows1 x "" - shows1 :: (Show1 f, Show a) => f a -> ShowS shows1 = showsPrec1 0 instance Show1 Maybe where showsPrec1 = showsPrec instance Show1 [] where showsPrec1 = showsPrec instance Show a => Show1 (Either a) where showsPrec1 = showsPrec -instance Show a => Show1 ((,) a) where showsPrec1 = showsPrec #if MIN_VERSION_base(4,8,0) instance Show1 Identity where showsPrec1 = showsPrec #endif @@ -266,6 +327,15 @@ $ showString "Alt " . showsPrec1 11 x #endif +#if MIN_VERSION_base(4,8,0) +instance Show a => Show1 (Const a) where showsPrec1 = showsPrec +#else +instance Show a => Show1 (Const a) where + showsPrec1 p (Const x) + = showParen (p > 10) + $ showString "Const " + . showsPrec 11 x +#endif instance Show1 Dual where showsPrec1 = showsPrec instance Show1 Sum where showsPrec1 = showsPrec instance Show1 Product where showsPrec1 = showsPrec @@ -278,12 +348,20 @@ instance Show1 Complex where showsPrec1 = showsPrec #endif --- instance Show1 Complex +instance Show a => Show1 ((,) a) where showsPrec1 = showsPrec +instance (Show a, Show b) => Show1 ((,,) a b) where showsPrec1 = showsPrec +instance (Show a, Show b, Show c) => Show1 ((,,,) a b c) where showsPrec1 = showsPrec +instance (Show a, Show b, Show c, Show d) => Show1 ((,,,,) a b c d) where showsPrec1 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e) => Show1 ((,,,,,) a b c d e) where showsPrec1 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e, Show f) => Show1 ((,,,,,,) a b c d e f) where showsPrec1 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g) => Show1 ((,,,,,,,) a b c d e f g) where showsPrec1 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h) => Show1 ((,,,,,,,,) a b c d e f g h) where showsPrec1 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i) => Show1 ((,,,,,,,,,) a b c d e f g h i) where showsPrec1 = showsPrec class Show2 f where showsPrec2 :: (Show a, Show b) => Int -> f a b -> ShowS #ifdef DEFAULT_SIGNATURES - default showsPrec2 :: (Show (f a b), Show a, Show b) => Int -> f a b -> ShowS + default showsPrec2 :: Show (f a b) => Int -> f a b -> ShowS showsPrec2 = showsPrec #endif showList2 :: (Show a, Show b) => [f a b] -> ShowS @@ -296,8 +374,22 @@ shows2 :: (Show2 f, Show a, Show b) => f a b -> ShowS shows2 = showsPrec2 0 -instance Show2 (,) where showsPrec2 = showsPrec instance Show2 Either where showsPrec2 = showsPrec +#if MIN_VERSION_base(4,8,0) +instance Show2 Const where showsPrec2 = showsPrec +#else +instance Show2 Const where showsPrec2 = showsPrec1 +#endif + +instance Show2 (,) where showsPrec2 = showsPrec +instance Show a => Show2 ((,,) a) where showsPrec2 = showsPrec +instance (Show a, Show b) => Show2 ((,,,) a b) where showsPrec2 = showsPrec +instance (Show a, Show b, Show c) => Show2 ((,,,,) a b c) where showsPrec2 = showsPrec +instance (Show a, Show b, Show c, Show d) => Show2 ((,,,,,) a b c d) where showsPrec2 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e) => Show2 ((,,,,,,) a b c d e) where showsPrec2 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e, Show f) => Show2 ((,,,,,,,) a b c d e f) where showsPrec2 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g) => Show2 ((,,,,,,,,) a b c d e f g) where showsPrec2 = showsPrec +instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h) => Show2 ((,,,,,,,,,) a b c d e f g h) where showsPrec2 = showsPrec showList__ :: (a -> ShowS) -> [a] -> ShowS showList__ _ [] s = "[]" ++ s @@ -309,7 +401,7 @@ class Read1 f where readsPrec1 :: Read a => Int -> ReadS (f a) #ifdef DEFAULT_SIGNATURES - default readsPrec1 :: (Read (f a), Read a) => Int -> ReadS (f a) + default readsPrec1 :: Read (f a) => Int -> ReadS (f a) readsPrec1 = readsPrec #endif @@ -362,10 +454,6 @@ readsPrec1 = readsPrec readList1 = readList -instance Read a => Read1 ((,) a) where - readsPrec1 = readsPrec - readList1 = readList - #if MIN_VERSION_base(4,8,0) instance Read1 Identity where readsPrec1 = readsPrec @@ -389,7 +477,6 @@ readList1 = readList #else instance Read1 ZipList where - readList1 = readList1Default readsPrec1 _ = readParen False $ \s -> do ("ZipList" , s1) <- lex s @@ -407,13 +494,24 @@ readList1 = readList #elif MIN_VERSION_base(4,6,0) instance Read1 Down where - readList1 = readList1Default readsPrec1 p = readParen (p > 10) $ \s -> do ("Down",s1) <- lex s (x ,s2) <- readsPrec 11 s1 return (Down x, s2) #endif +#if MIN_VERSION_base(4,8,0) +instance Read a => Read1 (Const a) where + readsPrec1 = readsPrec + readList1 = readList +#else +instance Read a => Read1 (Const a) where + readsPrec1 p = readParen (p > 10) $ \s -> + do ("Const",s1) <- lex s + (x ,s2) <- readsPrec 11 s1 + return (Const x, s2) +#endif + instance Read1 Dual where readsPrec1 = readsPrec readList1 = readList @@ -440,10 +538,20 @@ readList1 = readList #endif +instance Read a => Read1 ((,) a) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b) => Read1 ((,,) a b) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b, Read c) => Read1 ((,,,) a b c) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b, Read c, Read d) => Read1 ((,,,,) a b c d) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b, Read c, Read d, Read e) => Read1 ((,,,,,) a b c d e) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b, Read c, Read d, Read e, Read f) => Read1 ((,,,,,,) a b c d e f) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b, Read c, Read d, Read e, Read f, Read g) => Read1 ((,,,,,,,) a b c d e f g) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h) => Read1 ((,,,,,,,,) a b c d e f g h) where readsPrec1 = readsPrec; readList1 = readList +instance (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h, Read i) => Read1 ((,,,,,,,,,) a b c d e f g h i) where readsPrec1 = readsPrec; readList1 = readList + class Read2 f where readsPrec2 :: (Read a, Read b) => Int -> ReadS (f a b) #ifdef DEFAULT_SIGNATURES - default readsPrec2 :: (Read (f a b), Read a, Read b) => Int -> ReadS (f a b) + default readsPrec2 :: Read (f a b) => Int -> ReadS (f a b) readsPrec2 = readsPrec #endif readList2 :: (Read a, Read b) => ReadS [f a b] @@ -457,13 +565,29 @@ readListPrec2 = readS_to_Prec (_ -> readList2) #endif -instance Read2 (,) where +instance Read2 Either where readsPrec2 = readsPrec readList2 = readList -instance Read2 Either where +#if MIN_VERSION_base(4,8,0) +instance Read2 Const where readsPrec2 = readsPrec readList2 = readList +#else +instance Read2 Const where + readsPrec2 = readsPrec1 + readList2 = readList1 +#endif + +instance Read2 (,) where readsPrec2 = readsPrec; readList2 = readList +instance Read a => Read2 ((,,) a) where readsPrec2 = readsPrec; readList2 = readList +instance (Read a, Read b) => Read2 ((,,,) a b) where readsPrec2 = readsPrec; readList2 = readList +instance (Read a, Read b, Read c) => Read2 ((,,,,) a b c) where readsPrec2 = readsPrec; readList2 = readList +instance (Read a, Read b, Read c, Read d) => Read2 ((,,,,,) a b c d) where readsPrec2 = readsPrec; readList2 = readList +instance (Read a, Read b, Read c, Read d, Read e) => Read2 ((,,,,,,) a b c d e) where readsPrec2 = readsPrec; readList2 = readList +instance (Read a, Read b, Read c, Read d, Read e, Read f) => Read2 ((,,,,,,,) a b c d e f) where readsPrec2 = readsPrec; readList2 = readList +instance (Read a, Read b, Read c, Read d, Read e, Read f, Read g) => Read2 ((,,,,,,,,) a b c d e f g) where readsPrec2 = readsPrec; readList2 = readList +instance (Read a, Read b, Read c, Read d, Read e, Read f, Read g, Read h) => Read2 ((,,,,,,,,,) a b c d e f g h) where readsPrec2 = readsPrec; readList2 = readList read2 :: (Read2 f, Read a, Read b) => String -> f a b read2 s = either error id (readEither2 s) @@ -491,7 +615,7 @@ readListPrec2Default = list readPrec2 #endif --- annoying to hav to copy these from Text.Read +-- annoying to have to copy these from Text.Read list :: ReadPrec a -> ReadPrec [a] -- ^ @(list p)@ parses a list of things parsed by @p@, -- using the usual square-bracket syntax. @@ -513,38 +637,26 @@ xs <- listRest True return (x:xs) +-- If Show1 and Read1 are ever derived by the same mechanism as +-- Show and Read, rather than GND, that will change their behavior +-- here. newtype Lift1 f a = Lift1 { lower1 :: f a } - deriving (Functor, Foldable, Traversable) + deriving (Functor, Foldable, Traversable, Eq1, Ord1, Show1, Read1) -instance Eq1 f => Eq1 (Lift1 f) where Lift1 a ==# Lift1 b = a ==# b -instance Ord1 f => Ord1 (Lift1 f) where Lift1 a `compare1` Lift1 b = compare1 a b -instance Show1 f => Show1 (Lift1 f) where showsPrec1 d (Lift1 a) = showsPrec1 d a -instance Read1 f => Read1 (Lift1 f) where - readsPrec1 d = map (first Lift1) . readsPrec1 d - -instance (Eq1 f, Eq a) => Eq (Lift1 f a) where Lift1 a == Lift1 b = a ==# b -instance (Ord1 f, Ord a) => Ord (Lift1 f a) where Lift1 a `compare` Lift1 b = compare1 a b -instance (Show1 f, Show a) => Show (Lift1 f a) where showsPrec d (Lift1 a) = showsPrec1 d a -instance (Read1 f, Read a) => Read (Lift1 f a) where - readsPrec d = map (first Lift1) . readsPrec1 d +instance (Eq1 f, Eq a) => Eq (Lift1 f a) where (==) = (==#) +instance (Ord1 f, Ord a) => Ord (Lift1 f a) where compare = compare1 +instance (Show1 f, Show a) => Show (Lift1 f a) where showsPrec = showsPrec1 +instance (Read1 f, Read a) => Read (Lift1 f a) where readsPrec = readsPrec1 newtype Lift2 f a b = Lift2 { lower2 :: f a b } - deriving (Functor, Foldable, Traversable) + deriving (Functor, Foldable, Traversable, Eq2, Ord2, Show2, Read2) -instance Eq2 f => Eq2 (Lift2 f) where Lift2 a ==## Lift2 b = a ==## b -instance Ord2 f => Ord2 (Lift2 f) where Lift2 a `compare2` Lift2 b = compare2 a b -instance Show2 f => Show2 (Lift2 f) where showsPrec2 d (Lift2 a) = showsPrec2 d a -instance Read2 f => Read2 (Lift2 f) where - readsPrec2 d = map (first Lift2) . readsPrec2 d - -instance (Eq2 f, Eq a) => Eq1 (Lift2 f a) where Lift2 a ==# Lift2 b = a ==## b -instance (Ord2 f, Ord a) => Ord1 (Lift2 f a) where Lift2 a `compare1` Lift2 b = compare2 a b -instance (Show2 f, Show a) => Show1 (Lift2 f a) where showsPrec1 d (Lift2 a) = showsPrec2 d a -instance (Read2 f, Read a) => Read1 (Lift2 f a) where - readsPrec1 d = map (first Lift2) . readsPrec2 d - -instance (Eq2 f, Eq a, Eq b) => Eq (Lift2 f a b) where Lift2 a == Lift2 b = a ==## b -instance (Ord2 f, Ord a, Ord b) => Ord (Lift2 f a b) where Lift2 a `compare` Lift2 b = compare2 a b -instance (Show2 f, Show a, Show b) => Show (Lift2 f a b) where showsPrec d (Lift2 a) = showsPrec2 d a -instance (Read2 f, Read a, Read b) => Read (Lift2 f a b) where - readsPrec d = map (first Lift2) . readsPrec2 d +instance (Eq2 f, Eq a) => Eq1 (Lift2 f a) where (==#) = (==##) +instance (Ord2 f, Ord a) => Ord1 (Lift2 f a) where compare1 = compare2 +instance (Show2 f, Show a) => Show1 (Lift2 f a) where showsPrec1 = showsPrec2 +instance (Read2 f, Read a) => Read1 (Lift2 f a) where readsPrec1 = readsPrec2 + +instance (Eq2 f, Eq a, Eq b) => Eq (Lift2 f a b) where (==) = (==##) +instance (Ord2 f, Ord a, Ord b) => Ord (Lift2 f a b) where compare = compare2 +instance (Show2 f, Show a, Show b) => Show (Lift2 f a b) where showsPrec = showsPrec2 +instance (Read2 f, Read a, Read b) => Read (Lift2 f a b) where readsPrec = readsPrec2