packages feed

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 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