prelude-extras 0.4.0.2 → 0.4.0.3
raw patch · 4 files changed
+184/−67 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Prelude.Extras: infixr 4 >##
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => Prelude.Extras.Eq1 ((,,) a b)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => Prelude.Extras.Eq2 ((,,,) a b)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c) => Prelude.Extras.Eq1 ((,,,) a b c)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c) => Prelude.Extras.Eq2 ((,,,,) a b c)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d) => Prelude.Extras.Eq1 ((,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d) => Prelude.Extras.Eq2 ((,,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e) => Prelude.Extras.Eq1 ((,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e) => Prelude.Extras.Eq2 ((,,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f) => Prelude.Extras.Eq1 ((,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f) => Prelude.Extras.Eq2 ((,,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g) => Prelude.Extras.Eq1 ((,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g) => Prelude.Extras.Eq2 ((,,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g, GHC.Classes.Eq h) => Prelude.Extras.Eq1 ((,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g, GHC.Classes.Eq h) => Prelude.Extras.Eq2 ((,,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c, GHC.Classes.Eq d, GHC.Classes.Eq e, GHC.Classes.Eq f, GHC.Classes.Eq g, GHC.Classes.Eq h, GHC.Classes.Eq i) => Prelude.Extras.Eq1 ((,,,,,,,,,) a b c d e f g h i)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => Prelude.Extras.Ord1 ((,,) a b)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => Prelude.Extras.Ord2 ((,,,) a b)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c) => Prelude.Extras.Ord1 ((,,,) a b c)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c) => Prelude.Extras.Ord2 ((,,,,) a b c)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d) => Prelude.Extras.Ord1 ((,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d) => Prelude.Extras.Ord2 ((,,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e) => Prelude.Extras.Ord1 ((,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e) => Prelude.Extras.Ord2 ((,,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f) => Prelude.Extras.Ord1 ((,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f) => Prelude.Extras.Ord2 ((,,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g) => Prelude.Extras.Ord1 ((,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g) => Prelude.Extras.Ord2 ((,,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g, GHC.Classes.Ord h) => Prelude.Extras.Ord1 ((,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g, GHC.Classes.Ord h) => Prelude.Extras.Ord2 ((,,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c, GHC.Classes.Ord d, GHC.Classes.Ord e, GHC.Classes.Ord f, GHC.Classes.Ord g, GHC.Classes.Ord h, GHC.Classes.Ord i) => Prelude.Extras.Ord1 ((,,,,,,,,,) a b c d e f g h i)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b) => Prelude.Extras.Read1 ((,,) a b)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b) => Prelude.Extras.Read2 ((,,,) a b)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c) => Prelude.Extras.Read1 ((,,,) a b c)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c) => Prelude.Extras.Read2 ((,,,,) a b c)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d) => Prelude.Extras.Read1 ((,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d) => Prelude.Extras.Read2 ((,,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e) => Prelude.Extras.Read1 ((,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e) => Prelude.Extras.Read2 ((,,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e, GHC.Read.Read f) => Prelude.Extras.Read1 ((,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e, GHC.Read.Read f) => Prelude.Extras.Read2 ((,,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e, GHC.Read.Read f, GHC.Read.Read g) => Prelude.Extras.Read1 ((,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e, GHC.Read.Read f, GHC.Read.Read g) => Prelude.Extras.Read2 ((,,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e, GHC.Read.Read f, GHC.Read.Read g, GHC.Read.Read h) => Prelude.Extras.Read1 ((,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e, GHC.Read.Read f, GHC.Read.Read g, GHC.Read.Read h) => Prelude.Extras.Read2 ((,,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Read.Read a, GHC.Read.Read b, GHC.Read.Read c, GHC.Read.Read d, GHC.Read.Read e, GHC.Read.Read f, GHC.Read.Read g, GHC.Read.Read h, GHC.Read.Read i) => Prelude.Extras.Read1 ((,,,,,,,,,) a b c d e f g h i)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b) => Prelude.Extras.Show1 ((,,) a b)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b) => Prelude.Extras.Show2 ((,,,) a b)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c) => Prelude.Extras.Show1 ((,,,) a b c)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c) => Prelude.Extras.Show2 ((,,,,) a b c)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d) => Prelude.Extras.Show1 ((,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d) => Prelude.Extras.Show2 ((,,,,,) a b c d)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e) => Prelude.Extras.Show1 ((,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e) => Prelude.Extras.Show2 ((,,,,,,) a b c d e)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e, GHC.Show.Show f) => Prelude.Extras.Show1 ((,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e, GHC.Show.Show f) => Prelude.Extras.Show2 ((,,,,,,,) a b c d e f)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e, GHC.Show.Show f, GHC.Show.Show g) => Prelude.Extras.Show1 ((,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e, GHC.Show.Show f, GHC.Show.Show g) => Prelude.Extras.Show2 ((,,,,,,,,) a b c d e f g)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e, GHC.Show.Show f, GHC.Show.Show g, GHC.Show.Show h) => Prelude.Extras.Show1 ((,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e, GHC.Show.Show f, GHC.Show.Show g, GHC.Show.Show h) => Prelude.Extras.Show2 ((,,,,,,,,,) a b c d e f g h)
+ Prelude.Extras: instance (GHC.Show.Show a, GHC.Show.Show b, GHC.Show.Show c, GHC.Show.Show d, GHC.Show.Show e, GHC.Show.Show f, GHC.Show.Show g, GHC.Show.Show h, GHC.Show.Show i) => Prelude.Extras.Show1 ((,,,,,,,,,) a b c d e f g h i)
+ Prelude.Extras: instance GHC.Classes.Eq a => Prelude.Extras.Eq1 ((,) a)
+ Prelude.Extras: instance GHC.Classes.Eq a => Prelude.Extras.Eq1 (Data.Functor.Const.Const a)
+ Prelude.Extras: instance GHC.Classes.Eq a => Prelude.Extras.Eq2 ((,,) a)
+ Prelude.Extras: instance GHC.Classes.Ord a => Prelude.Extras.Ord1 ((,) a)
+ Prelude.Extras: instance GHC.Classes.Ord a => Prelude.Extras.Ord1 (Data.Functor.Const.Const a)
+ Prelude.Extras: instance GHC.Classes.Ord a => Prelude.Extras.Ord2 ((,,) a)
+ Prelude.Extras: instance GHC.Read.Read a => Prelude.Extras.Read1 (Data.Functor.Const.Const a)
+ Prelude.Extras: instance GHC.Read.Read a => Prelude.Extras.Read2 ((,,) a)
+ Prelude.Extras: instance GHC.Show.Show a => Prelude.Extras.Show1 (Data.Functor.Const.Const a)
+ Prelude.Extras: instance GHC.Show.Show a => Prelude.Extras.Show2 ((,,) a)
+ Prelude.Extras: instance Prelude.Extras.Eq2 (,)
+ Prelude.Extras: instance Prelude.Extras.Eq2 Data.Functor.Const.Const
+ Prelude.Extras: instance Prelude.Extras.Ord2 (,)
+ Prelude.Extras: instance Prelude.Extras.Ord2 Data.Functor.Const.Const
+ Prelude.Extras: instance Prelude.Extras.Read2 Data.Functor.Const.Const
+ Prelude.Extras: instance Prelude.Extras.Show2 Data.Functor.Const.Const
- Prelude.Extras: (==##) :: (Eq2 f, Eq a, Eq b) => f a b -> f a b -> Bool
+ Prelude.Extras: (==##) :: (Eq2 f, Eq (f a b)) => f a b -> f a b -> Bool
- Prelude.Extras: (==#) :: (Eq1 f, Eq a) => f a -> f a -> Bool
+ Prelude.Extras: (==#) :: (Eq1 f, Eq (f a)) => f a -> f a -> Bool
- Prelude.Extras: compare1 :: (Ord1 f, Ord a) => f a -> f a -> Ordering
+ Prelude.Extras: compare1 :: (Ord1 f, Ord (f a)) => f a -> f a -> Ordering
- Prelude.Extras: compare2 :: (Ord2 f, Ord a, Ord b) => f a b -> f a b -> Ordering
+ Prelude.Extras: compare2 :: (Ord2 f, Ord (f a b)) => f a b -> f a b -> Ordering
- Prelude.Extras: readsPrec1 :: (Read1 f, Read a) => Int -> ReadS (f a)
+ Prelude.Extras: readsPrec1 :: (Read1 f, Read (f a)) => Int -> ReadS (f a)
- Prelude.Extras: readsPrec2 :: (Read2 f, Read a, Read b) => Int -> ReadS (f a b)
+ Prelude.Extras: readsPrec2 :: (Read2 f, Read (f a b)) => Int -> ReadS (f a b)
- Prelude.Extras: showsPrec1 :: (Show1 f, Show a) => Int -> f a -> ShowS
+ Prelude.Extras: showsPrec1 :: (Show1 f, Show (f a)) => Int -> f a -> ShowS
- Prelude.Extras: showsPrec2 :: (Show2 f, Show a, Show b) => Int -> f a b -> ShowS
+ Prelude.Extras: showsPrec2 :: (Show2 f, Show (f a b)) => Int -> f a b -> ShowS
Files
- CHANGELOG.markdown +5/−0
- LICENSE +1/−1
- prelude-extras.cabal +2/−2
- src/Prelude/Extras.hs +176/−64
CHANGELOG.markdown view
@@ -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
LICENSE view
@@ -1,4 +1,4 @@-Copyright 2011-2014 Edward Kmett+Copyright 2011-2016 Edward Kmett All rights reserved.
prelude-extras.cabal view
@@ -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:
src/Prelude/Extras.hs view
@@ -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,14 +230,24 @@ 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 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,9 +374,23 @@ 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 showList__ showx (x:xs) s = '[' : showx x (showl xs)@@ -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,14 +565,30 @@ 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)--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+ deriving (Functor, Foldable, Traversable, Eq1, Ord1, Show1, Read1) -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)--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+ deriving (Functor, Foldable, Traversable, Eq2, Ord2, Show2, Read2) -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) => 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 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, 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