packages feed

generic-deriving 1.7.0 → 1.8.0

raw patch · 4 files changed

+1254/−128 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Generics.Deriving.TH: deriveAll :: Name -> Q [Dec]
+ Generics.Deriving.TH: deriveRep0 :: Name -> Q [Dec]
+ Generics.Deriving.TH: deriveRepresentable0 :: Name -> Q [Dec]
+ Generics.Deriving.TH: simplInstance :: Name -> Name -> Name -> Name -> Q [Dec]

Files

generic-deriving.cabal view
@@ -1,5 +1,5 @@ name:                   generic-deriving
-version:                1.7.0
+version:                1.8.0
 synopsis:               Generic programming library for generalised deriving.
 description:
 
src/Generics/Deriving/Base.hs view
@@ -547,7 +547,6 @@ 
 #if __GLASGOW_HASKELL__ >= 701
 import GHC.Generics
-
 #else
 --------------------------------------------------------------------------------
 -- Representation types
@@ -558,32 +557,38 @@ 
 -- | Unit: used for constructors without arguments
 data U1 p = U1
+  deriving (Eq, Ord, Read, Show)
 
 -- | Used for marking occurrences of the parameter
 newtype Par1 p = Par1 { unPar1 :: p }
-
+  deriving (Eq, Ord, Read, Show)
 
 -- | Recursive calls of kind * -> *
 newtype Rec1 f p = Rec1 { unRec1 :: f p }
+  deriving (Eq, Ord, Read, Show)
 
 -- | Constants, additional parameters and recursion of kind *
 newtype K1 i c p = K1 { unK1 :: c }
+  deriving (Eq, Ord, Read, Show)
 
 -- | Meta-information (constructor names, etc.)
 newtype M1 i c f p = M1 { unM1 :: f p }
+  deriving (Eq, Ord, Read, Show)
 
 -- | Sums: encode choice between constructors
 infixr 5 :+:
 data (:+:) f g p = L1 { unL1 :: f p } | R1 { unR1 :: g p }
+  deriving (Eq, Ord, Read, Show)
 
 -- | Products: encode multiple arguments to constructors
 infixr 6 :*:
 data (:*:) f g p = f p :*: g p
+  deriving (Eq, Ord, Read, Show)
 
 -- | Composition of functors
 infixr 7 :.:
 newtype (:.:) f g p = Comp1 { unComp1 :: f (g p) }
-
+  deriving (Eq, Ord, Read, Show)
 -- | Tag for K1: recursion (of kind *)
 data R
 -- | Tag for K1: parameters (other than the last)
src/Generics/Deriving/Instances.hs view
@@ -8,127 +8,1250 @@ module Generics.Deriving.Instances (
 -- Only instances from Generics.Deriving.Base
 -- and the Generic1 instances
-#if __GLASGOW_HASKELL__ < 705
-    Rep1Maybe, Rep1List
-#endif
-#if __GLASGOW_HASKELL__ < 701
-  -- * Representations for base types
-  , Rep0Char, Rep0Int, Rep0Float
-  , Rep0Maybe, Rep0List
-#endif
-  ) where
-
-#if __GLASGOW_HASKELL__ < 705
-import Generics.Deriving.Base
-#endif
-
-#if __GLASGOW_HASKELL__ < 701
---------------------------------------------------------------------------------
--- Representation for base types
---------------------------------------------------------------------------------
-
--- Representation types
-{-
-type Rep1Par1 = Par1
-instance Generic1 Par1 Rep1Par1 where
-  from1 = id
-  to1 = id
-
-type Rep1Rec1 f = Rec1 f
-instance Generic1 (Rec1 f) (Rep1Rec1 f) where
-  from1 = id
-  to1 = id
--}
--- Kind *
-
-type Rep0Char = Rec0 Char
-instance Generic Char where
-  type Rep Char = Rep0Char
-  from = K1
-  to = unK1
-
-type Rep0Int = Rec0 Int
-instance Generic Int where
-  type Rep Int = Rep0Int
-  from = K1
-  to = unK1
-
-type Rep0Float = Rec0 Float
-instance Generic Float where
-  type Rep Float = Rep0Float
-  from = K1
-  to = unK1
-
--- etc...
-
--- Kind * -> *
-
-type Rep0Maybe a = D1 Maybe_ (C1 Nothing_ U1 :+: C1 Just_ (Par0 a))
-instance Generic (Maybe a) where
-  type Rep (Maybe a) = Rep0Maybe a
-  from Nothing  = M1 (L1 (M1 U1))
-  from (Just x) = M1 (R1 (M1 (K1 x)))
-  to (M1 (L1 (M1 U1)))     = Nothing
-  to (M1 (R1 (M1 (K1 x)))) = Just x
-
-type Rep0List a = D1 List__ ((C1 Nil__ U1) :+: (C1 Cons__ (Par0 a :*: Rec0 [a])))
-instance Generic [a] where
-  type Rep [a] = Rep0List a
-  from []    = M1 (L1 (M1 U1))
-  from (h:t) = M1 (R1 (M1 (K1 h :*: K1 t)))
-  to (M1 (L1 (M1 U1)))              = []
-  to (M1 (R1 (M1 (K1 h :*: K1 t)))) = h : t
-#endif
-
-#if __GLASGOW_HASKELL__ < 705
--- GHC 7.2 and 7.4 still need these instances; 7.6 doesn't
-
-data Maybe_
-data Nothing_
-data Just_
-
-instance Datatype Maybe_ where
-  datatypeName _ = "Maybe"
-  moduleName   _ = "Representation"
-
-instance Constructor Nothing_ where
-  conName _ = "Nothing"
-
-instance Constructor Just_ where
-  conName _ = "Just"
-
-
-type Rep1Maybe = D1 Maybe_ (C1 Nothing_ U1 :+: C1 Just_ Par1)
-instance Generic1 Maybe where
-  type Rep1 Maybe = Rep1Maybe
-  from1 Nothing  = M1 (L1 (M1 U1))
-  from1 (Just x) = M1 (R1 (M1 (Par1 x)))
-  to1 (M1 (L1 (M1 U1)))       = Nothing
-  to1 (M1 (R1 (M1 (Par1 x)))) = Just x
-
-
-data List__
-data Nil__
-data Cons__
-
-instance Datatype List__ where
-  datatypeName _ = "[]"
-  moduleName   _ = "Data.List"
-
-instance Constructor Nil__  where conName _ = "[]"
-instance Constructor Cons__ where
-  conName   _ = ":"
-  conFixity _ = Infix RightAssociative 5
-
-
-type Rep1List = D1 List__ ((C1 Nil__ U1) :+: (C1 Cons__ (Par1 :*: Rec1 [])))
-instance Generic1 [] where
-  type Rep1 [] = Rep1List
-  from1 []    = M1 (L1 (M1 U1))
-  from1 (h:t) = M1 (R1 (M1 (Par1 h :*: Rec1 t)))
-  to1 (M1 (L1 (M1 U1)))                  = []
-  to1 (M1 (R1 (M1 (Par1 h :*: Rec1 t)))) = h : t
-
--- etc...
+#if __GLASGOW_HASKELL__ < 708
+    Rep0All
+  , Rep0Any
+  , Rep0Arity
+  , Rep0Associativity
+  , Rep0Const
+  , Rep1Const
+  , Rep0Dual
+  , Rep1Dual
+  , Rep0Endo
+  , Rep0First
+  , Rep1First
+  , Rep0Fixity
+  , Rep0Last
+  , Rep1Last
+  , Rep0Product
+  , Rep1Product
+  , Rep0Sum
+  , Rep1Sum
+  , Rep0WrappedArrow
+  , Rep1WrappedArrow
+  , Rep0WrappedMonad
+  , Rep1WrappedMonad
+  , Rep0ZipList
+  , Rep1ZipList
+  , Rep0U1
+  , Rep0Par1
+  , Rep0Rec1
+  , Rep0K1
+  , Rep0M1
+  , Rep0ConSum
+  , Rep0ConProduct
+  , Rep0ConCompose
+#endif
+#if __GLASGOW_HASKELL__ < 705
+  , Rep1Either
+  , Rep1List
+  , Rep1Maybe
+  , Rep1Tuple2
+  , Rep1Tuple3
+  , Rep1Tuple4
+  , Rep1Tuple5
+  , Rep1Tuple6
+  , Rep1Tuple7
+#endif
+#if __GLASGOW_HASKELL__ < 701
+  -- * Representations for base types
+  , Rep0Bool
+  , Rep0Char
+  , Rep0Double
+  , Rep0Either
+  , Rep0Int
+  , Rep0Float
+  , Rep0List
+  , Rep0Maybe
+  , Rep0Ordering
+  , Rep0Tuple2
+  , Rep0Tuple3
+  , Rep0Tuple4
+  , Rep0Tuple5
+  , Rep0Tuple6
+  , Rep0Tuple7
+  , Rep0Unit
+#endif
+  ) where
+
+#if __GLASGOW_HASKELL__ < 708
+import Control.Applicative
+import Data.Monoid
+import Generics.Deriving.Base
+
+--------------------------------------------------------------------------------
+-- Representations for base types
+--------------------------------------------------------------------------------
+
+type Rep0All = D1 D1All (C1 C1_0All (S1 S1_0_0All (Rec0 Bool)))
+
+instance Generic All where
+    type Rep All = Rep0All
+    from (All a) = M1 (M1 (M1 (K1 a)))
+    to (M1 (M1 (M1 (K1 a)))) = All a
+
+data D1All
+data C1_0All
+data S1_0_0All
+
+instance Datatype D1All where
+    datatypeName _ = "All"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0All where
+    conName     _ = "All"
+    conIsRecord _ = True
+
+instance Selector S1_0_0All where
+    selName _ = "getAll"
+
+-----
+
+type Rep0Any = D1 D1Any (C1 C1_0Any (S1 S1_0_0Any (Rec0 Bool)))
+
+instance Generic Any where
+    type Rep Any = Rep0Any
+    from (Any a) = M1 (M1 (M1 (K1 a)))
+    to (M1 (M1 (M1 (K1 a)))) = Any a
+
+data D1Any
+data C1_0Any
+data S1_0_0Any
+
+instance Datatype D1Any where
+    datatypeName _ = "Any"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0Any where
+    conName     _ = "Any"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Any where
+    selName _ = "getAny"
+
+-----
+
+type Rep0Arity = D1 D1Arity (C1 C1_0Arity U1
+                         :+: C1 C1_1Arity (S1 NoSelector (Rec0 Int)))
+
+instance Generic Arity where
+    type Rep Arity = Rep0Arity
+
+    from NoArity   = M1 (L1 (M1 U1))
+    from (Arity a) = M1 (R1 (M1 (M1 (K1 a))))
+
+    to (M1 (L1 (M1 U1)))          = NoArity
+    to (M1 (R1 (M1 (M1 (K1 a))))) = Arity a
+
+data D1Arity
+data C1_0Arity
+data C1_1Arity
+
+instance Datatype D1Arity where
+    datatypeName _ = "Arity"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0Arity where
+    conName _ = "NoArity"
+
+instance Constructor C1_1Arity where
+    conName _ = "Arity"
+
+-----
+
+type Rep0Associativity = D1 D1Associativity (C1 C1_0Associativity U1
+                                        :+: (C1 C1_1Associativity U1
+                                        :+:  C1 C1_2Associativity U1))
+
+instance Generic Associativity where
+    type Rep Associativity = Rep0Associativity
+
+    from LeftAssociative  = M1 (L1 (M1 U1))
+    from RightAssociative = M1 (R1 (L1 (M1 U1)))
+    from NotAssociative   = M1 (R1 (R1 (M1 U1)))
+
+    to (M1 (L1 (M1 U1)))      = LeftAssociative
+    to (M1 (R1 (L1 (M1 U1)))) = RightAssociative
+    to (M1 (R1 (R1 (M1 U1)))) = NotAssociative
+
+data D1Associativity
+data C1_0Associativity
+data C1_1Associativity
+data C1_2Associativity
+
+instance Datatype D1Associativity where
+    datatypeName _ = "Associativity"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0Associativity where
+    conName _ = "LeftAssociative"
+
+instance Constructor C1_1Associativity where
+    conName _ = "RightAssociative"
+
+instance Constructor C1_2Associativity where
+    conName _ = "NotAssociative"
+
+-----
+
+type Rep0Const a b = D1 D1Const (C1 C1_0Const (S1 S1_0_0Const (Rec0 a)))
+type Rep1Const a   = D1 D1Const (C1 C1_0Const (S1 S1_0_0Const (Rec0 a)))
+
+instance Generic (Const a b) where
+    type Rep (Const a b) = Rep0Const a b
+    from (Const a) = M1 (M1 (M1 (K1 a)))
+    to (M1 (M1 (M1 (K1 a)))) = Const a
+
+instance Generic1 (Const a) where
+    type Rep1 (Const a) = Rep1Const a
+    from1 (Const a) = M1 (M1 (M1 (K1 a)))
+    to1 (M1 (M1 (M1 (K1 a)))) = Const a
+
+data D1Const
+data C1_0Const
+data S1_0_0Const
+
+instance Datatype D1Const where
+    datatypeName _ = "Const"
+    moduleName   _ = "Control.Applicative"
+
+instance Constructor C1_0Const where
+    conName     _ = "Const"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Const where
+    selName _ = "getConst"
+
+-----
+
+type Rep0Dual a = D1 D1Dual (C1 C1_0Dual (S1 S1_0_0Dual (Rec0 a)))
+type Rep1Dual   = D1 D1Dual (C1 C1_0Dual (S1 S1_0_0Dual Par1))
+
+instance Generic (Dual a) where
+    type Rep (Dual a) = Rep0Dual a
+    from (Dual d) = M1 (M1 (M1 (K1 d)))
+    to (M1 (M1 (M1 (K1 d)))) = Dual d
+
+instance Generic1 Dual where
+    type Rep1 Dual = Rep1Dual
+    from1 (Dual d) = M1 (M1 (M1 (Par1 d)))
+    to1 (M1 (M1 (M1 (Par1 d)))) = Dual d
+
+data D1Dual
+data C1_0Dual
+data S1_0_0Dual
+
+instance Datatype D1Dual where
+    datatypeName _ = "Dual"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0Dual where
+    conName     _ = "Dual"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Dual where
+    selName _ = "getDual"
+
+-----
+
+type Rep0Endo a = D1 D1Endo (C1 C1_0Endo (S1 S1_0_0Endo (Rec0 (a -> a))))
+
+instance Generic (Endo a) where
+    type Rep (Endo a) = Rep0Endo a
+    from (Endo e) = M1 (M1 (M1 (K1 e)))
+    to (M1 (M1 (M1 (K1 e)))) = Endo e
+
+data D1Endo
+data C1_0Endo
+data S1_0_0Endo
+
+instance Datatype D1Endo where
+    datatypeName _ = "Endo"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0Endo where
+    conName     _ = "Endo"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Endo where
+    selName _ = "appEndo"
+
+-----
+
+type Rep0First a = D1 D1First (C1 C1_0First (S1 S1_0_0First (Rec0 (Maybe a))))
+type Rep1First   = D1 D1First (C1 C1_0First (S1 S1_0_0First (Rec1 Maybe)))
+
+instance Generic (First a) where
+    type Rep (First a) = Rep0First a
+    from (First f) = M1 (M1 (M1 (K1 f)))
+    to (M1 (M1 (M1 (K1 f)))) = First f
+
+instance Generic1 First where
+    type Rep1 First = Rep1First
+    from1 (First f) = M1 (M1 (M1 (Rec1 f)))
+    to1 (M1 (M1 (M1 (Rec1 f)))) = First f
+
+data D1First
+data C1_0First
+data S1_0_0First
+
+instance Datatype D1First where
+    datatypeName _ = "First"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0First where
+    conName     _ = "First"
+    conIsRecord _ = True
+
+instance Selector S1_0_0First where
+    selName _ = "getFirst"
+
+-----
+
+type Rep0Fixity = D1 D1Fixity (C1 C1_0Fixity U1
+                           :+: C1 C1_1Fixity (S1 NoSelector (Rec0 Associativity)
+                                          :*: S1 NoSelector (Rec0 Int)))
+
+instance Generic Fixity where
+    type Rep Fixity = Rep0Fixity
+
+    from Prefix      = M1 (L1 (M1 U1))
+    from (Infix a i) = M1 (R1 (M1 (M1 (K1 a) :*: M1 (K1 i))))
+
+    to (M1 (L1 (M1 U1)))                        = Prefix
+    to (M1 (R1 (M1 (M1 (K1 a) :*: M1 (K1 i))))) = Infix a i
+
+data D1Fixity
+data C1_0Fixity
+data C1_1Fixity
+
+instance Datatype D1Fixity where
+    datatypeName _ = "Fixity"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0Fixity where
+    conName _ = "Prefix"
+
+instance Constructor C1_1Fixity where
+    conName _ = "Infix"
+
+-----
+
+type Rep0Last a = D1 D1Last (C1 C1_0Last (S1 S1_0_0Last (Rec0 (Maybe a))))
+type Rep1Last   = D1 D1Last (C1 C1_0Last (S1 S1_0_0Last (Rec1 Maybe)))
+
+instance Generic (Last a) where
+    type Rep (Last a) = Rep0Last a
+    from (Last l) = M1 (M1 (M1 (K1 l)))
+    to (M1 (M1 (M1 (K1 l)))) = Last l
+
+instance Generic1 Last where
+    type Rep1 Last = Rep1Last
+    from1 (Last l) = M1 (M1 (M1 (Rec1 l)))
+    to1 (M1 (M1 (M1 (Rec1 l)))) = Last l
+
+data D1Last
+data C1_0Last
+data S1_0_0Last
+
+instance Datatype D1Last where
+    datatypeName _ = "Last"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0Last where
+    conName     _ = "Last"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Last where
+    selName _ = "getLast"
+
+-----
+
+type Rep0Product a = D1 D1Product (C1 C1_0Product (S1 S1_0_0Product (Rec0 a)))
+type Rep1Product   = D1 D1Product (C1 C1_0Product (S1 S1_0_0Product Par1))
+
+instance Generic (Product a) where
+    type Rep (Product a) = Rep0Product a
+    from (Product p) = M1 (M1 (M1 (K1 p)))
+    to (M1 (M1 (M1 (K1 p)))) = Product p
+
+instance Generic1 Product where
+    type Rep1 Product = Rep1Product
+    from1 (Product p) = M1 (M1 (M1 (Par1 p)))
+    to1 (M1 (M1 (M1 (Par1 p)))) = Product p
+
+data D1Product
+data C1_0Product
+data S1_0_0Product
+
+instance Datatype D1Product where
+    datatypeName _ = "Product"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0Product where
+    conName     _ = "Product"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Product where
+    selName _ = "getProduct"
+
+-----
+
+type Rep0Sum a = D1 D1Sum (C1 C1_0Sum (S1 S1_0_0Sum (Rec0 a)))
+type Rep1Sum   = D1 D1Sum (C1 C1_0Sum (S1 S1_0_0Sum Par1))
+
+instance Generic (Sum a) where
+    type Rep (Sum a) = Rep0Sum a
+    from (Sum s) = M1 (M1 (M1 (K1 s)))
+    to (M1 (M1 (M1 (K1 s)))) = Sum s
+
+instance Generic1 Sum where
+    type Rep1 Sum = Rep1Sum
+    from1 (Sum s) = M1 (M1 (M1 (Par1 s)))
+    to1 (M1 (M1 (M1 (Par1 s)))) = Sum s
+
+data D1Sum
+data C1_0Sum
+data S1_0_0Sum
+
+instance Datatype D1Sum where
+    datatypeName _ = "Sum"
+    moduleName   _ = "Data.Monoid"
+
+instance Constructor C1_0Sum where
+    conName     _ = "Sum"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Sum where
+    selName _ = "getSum"
+
+-----
+
+type Rep0WrappedArrow a b c =
+    D1 D1WrappedArrow (C1 C1_0WrappedArrow (S1 S1_0_0WrappedArrow (Rec0 (a b c))))
+type Rep1WrappedArrow a b =
+    D1 D1WrappedArrow (C1 C1_0WrappedArrow (S1 S1_0_0WrappedArrow (Rec1 (a b))))
+
+instance Generic (WrappedArrow a b c) where
+    type Rep (WrappedArrow a b c) = Rep0WrappedArrow a b c
+    from (WrapArrow a) = M1 (M1 (M1 (K1 a)))
+    to (M1 (M1 (M1 (K1 a)))) = WrapArrow a
+
+instance Generic1 (WrappedArrow a b) where
+    type Rep1 (WrappedArrow a b) = Rep1WrappedArrow a b
+    from1 (WrapArrow a) = M1 (M1 (M1 (Rec1 a)))
+    to1 (M1 (M1 (M1 (Rec1 a)))) = WrapArrow a
+
+data D1WrappedArrow
+data C1_0WrappedArrow
+data S1_0_0WrappedArrow
+
+instance Datatype D1WrappedArrow where
+  datatypeName _ = "WrappedArrow"
+  moduleName   _ = "Control.Applicative"
+
+instance Constructor C1_0WrappedArrow where
+  conName     _ = "WrapArrow"
+  conIsRecord _ = True
+
+instance Selector S1_0_0WrappedArrow where
+  selName _ = "unwrapArrow"
+
+-----
+
+type Rep0WrappedMonad m a =
+    D1 D1WrappedMonad (C1 C1_0WrappedMonad (S1 S1_0_0WrappedMonad (Rec0 (m a))))
+type Rep1WrappedMonad m =
+    D1 D1WrappedMonad (C1 C1_0WrappedMonad (S1 S1_0_0WrappedMonad (Rec1 m)))
+
+instance Generic (WrappedMonad m a) where
+    type Rep (WrappedMonad m a) = Rep0WrappedMonad m a
+    from (WrapMonad m) = M1 (M1 (M1 (K1 m)))
+    to (M1 (M1 (M1 (K1 m)))) = WrapMonad m
+
+instance Generic1 (WrappedMonad m) where
+    type Rep1 (WrappedMonad m) = Rep1WrappedMonad m
+    from1 (WrapMonad m) = M1 (M1 (M1 (Rec1 m)))
+    to1 (M1 (M1 (M1 (Rec1 m)))) = WrapMonad m
+
+data D1WrappedMonad
+data C1_0WrappedMonad
+data S1_0_0WrappedMonad
+
+instance Datatype D1WrappedMonad where
+    datatypeName _ = "WrappedMonad"
+    moduleName   _ = "Control.Applicative"
+
+instance Constructor C1_0WrappedMonad where
+    conName     _ = "WrapMonad"
+    conIsRecord _ = True
+
+instance Selector S1_0_0WrappedMonad where
+    selName _ = "unwrapMonad"
+
+-----
+
+type Rep0ZipList a = D1 D1ZipList (C1 C1_0ZipList (S1 S1_0_0ZipList (Rec0 [a])))
+type Rep1ZipList   = D1 D1ZipList (C1 C1_0ZipList (S1 S1_0_0ZipList (Rec1 [])))
+
+instance Generic (ZipList a) where
+    type Rep (ZipList a) = Rep0ZipList a
+    from (ZipList z) = M1 (M1 (M1 (K1 z)))
+    to (M1 (M1 (M1 (K1 z)))) = ZipList z
+
+instance Generic1 ZipList where
+    type Rep1 ZipList = Rep1ZipList
+    from1 (ZipList z) = M1 (M1 (M1 (Rec1 z)))
+    to1 (M1 (M1 (M1 (Rec1 z)))) = ZipList z
+
+data D1ZipList
+data C1_0ZipList
+data S1_0_0ZipList
+
+instance Datatype D1ZipList where
+    datatypeName _ = "ZipList"
+    moduleName   _ = "Control.Applicative"
+
+instance Constructor C1_0ZipList where
+    conName     _ = "ZipList"
+    conIsRecord _ = True
+
+instance Selector S1_0_0ZipList where
+    selName _ = "getZipList"
+
+-----
+
+type Rep0U1 p = D1 D1U1 (C1 C1_0U1 U1)
+
+instance Generic (U1 p) where
+    type Rep (U1 p) = Rep0U1 p
+    from U1 = M1 (M1 U1)
+    to (M1 (M1 U1)) = U1
+
+data D1U1
+data C1_0U1
+
+instance Datatype D1U1 where
+    datatypeName _ = "U1"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0U1 where
+    conName _ = "U1"
+
+-----
+
+type Rep0Par1 p = D1 D1Par1 (C1 C1_0Par1 (S1 S1_0_0Par1 (Rec0 p)))
+
+instance Generic (Par1 p) where
+    type Rep (Par1 p) = Rep0Par1 p
+    from (Par1 p) = M1 (M1 (M1 (K1 p)))
+    to (M1 (M1 (M1 (K1 p)))) = Par1 p
+
+data D1Par1
+data C1_0Par1
+data S1_0_0Par1
+
+instance Datatype D1Par1 where
+    datatypeName _ = "Par1"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0Par1 where
+    conName     _ = "Par1"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Par1 where
+    selName _ = "unPar1"
+
+-----
+
+type Rep0Rec1 f p = D1 D1Rec1 (C1 C1_0Rec1 (S1 S1_0_0Rec1 (Rec0 (f p))))
+
+instance Generic (Rec1 f p) where
+    type Rep (Rec1 f p) = Rep0Rec1 f p
+    from (Rec1 r) = M1 (M1 (M1 (K1 r)))
+    to (M1 (M1 (M1 (K1 r)))) = Rec1 r
+
+data D1Rec1
+data C1_0Rec1
+data S1_0_0Rec1
+
+instance Datatype D1Rec1 where
+    datatypeName _ = "Rec1"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0Rec1 where
+    conName     _ = "Rec1"
+    conIsRecord _ = True
+
+instance Selector S1_0_0Rec1 where
+    selName _ = "unRec1"
+
+-----
+
+type Rep0K1 i c p = D1 D1K1 (C1 C1_0K1 (S1 S1_0_0K1 (Rec0 c)))
+
+instance Generic (K1 i c p) where
+    type Rep (K1 i c p) = Rep0K1 i c p
+    from (K1 c) = M1 (M1 (M1 (K1 c)))
+    to (M1 (M1 (M1 (K1 c)))) = K1 c
+
+data D1K1
+data C1_0K1
+data S1_0_0K1
+
+instance Datatype D1K1 where
+    datatypeName _ = "K1"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0K1 where
+    conName     _ = "K1"
+    conIsRecord _ = True
+
+instance Selector S1_0_0K1 where
+    selName _ = "unK1"
+
+-----
+
+type Rep0M1 i c f p = D1 D1M1 (C1 C1_0M1 (S1 S1_0_0M1 (Rec0 (f p))))
+
+instance Generic (M1 i c f p) where
+    type Rep (M1 i c f p) = Rep0M1 i c f p
+    from (M1 m) = M1 (M1 (M1 (K1 m)))
+    to (M1 (M1 (M1 (K1 m)))) = M1 m
+
+data D1M1
+data C1_0M1
+data S1_0_0M1
+
+instance Datatype D1M1 where
+    datatypeName _ = "M1"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0M1 where
+    conName     _ = "M1"
+    conIsRecord _ = True
+
+instance Selector S1_0_0M1 where
+    selName _ = "unM1"
+
+-----
+
+type Rep0ConSum f g p = D1 D1ConSum (C1 C1_0ConSum (S1 NoSelector (Rec0 (f p)))
+                                 :+: C1 C1_1ConSum (S1 NoSelector (Rec0 (g p))))
+
+instance Generic ((f :+: g) p) where
+    type Rep ((f :+: g) p) = Rep0ConSum f g p
+
+    from (L1 l) = M1 (L1 (M1 (M1 (K1 l))))
+    from (R1 r) = M1 (R1 (M1 (M1 (K1 r))))
+
+    to (M1 (L1 (M1 (M1 (K1 l))))) = L1 l
+    to (M1 (R1 (M1 (M1 (K1 r))))) = R1 r
+
+data D1ConSum
+data C1_0ConSum
+data C1_1ConSum
+
+instance Datatype D1ConSum where
+    datatypeName _ = ":+:"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0ConSum where
+    conName _ = "L1"
+
+instance Constructor C1_1ConSum where
+    conName _ = "R1"
+
+-----
+
+type Rep0ConProduct f g p =
+    D1 D1ConProduct (C1 C1_ConProduct (S1 NoSelector (Rec0 (f p))
+                                   :*: S1 NoSelector (Rec0 (g p))))
+
+instance Generic ((f :*: g) p) where
+    type Rep ((f :*: g) p) = Rep0ConProduct f g p
+    from (f :*: g) = M1 (M1 (M1 (K1 f) :*: M1 (K1 g)))
+    to (M1 (M1 (M1 (K1 f) :*: M1 (K1 g)))) = f :*: g
+
+data D1ConProduct
+data C1_ConProduct
+
+instance Datatype D1ConProduct where
+    datatypeName _ = ":*:"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_ConProduct where
+    conName   _ = ":*:"
+    conFixity _ = Infix RightAssociative 6
+
+-----
+
+type Rep0ConCompose f g p =
+    D1 D1ConCompose (C1 C1_0ConCompose (S1 S1_0_0ConCompose (Rec0 (f (g p)))))
+
+instance Generic ((f :.: g) p) where
+    type Rep ((f :.: g) p) = Rep0ConCompose f g p
+    from (Comp1 c) = M1 (M1 (M1 (K1 c)))
+    to (M1 (M1 (M1 (K1 c)))) = Comp1 c
+
+data D1ConCompose
+data C1_0ConCompose
+data S1_0_0ConCompose
+
+instance Datatype D1ConCompose where
+    datatypeName _ = ":.:"
+    moduleName   _ = "GHC.Generics"
+
+instance Constructor C1_0ConCompose where
+  conName     _ = "Comp1"
+  conIsRecord _ = True
+
+instance Selector S1_0_0ConCompose where
+  selName _ = "unComp1"
+#endif
+
+-----
+
+#if __GLASGOW_HASKELL__ < 705
+type Rep1List = D1 D1List (C1 C1_0List U1 :+:
+                           C1 C1_1List (S1 NoSelector Par1
+                                    :*: S1 NoSelector (Rec1 [])))
+
+instance Generic1 [] where
+    type Rep1 [] = Rep1List
+
+    from1 []    = M1 (L1 (M1 U1))
+    from1 (h:t) = M1 (R1 (M1 (M1 (Par1 h) :*: M1 (Rec1 t))))
+
+    to1 (M1 (L1 (M1 U1)))                            = []
+    to1 (M1 (R1 (M1 (M1 (Par1 h) :*: M1 (Rec1 t))))) = h : t
+
+data D1List
+data C1_0List
+data C1_1List
+
+instance Datatype D1List where
+    datatypeName _ = "[]"
+    moduleName   _ = "GHC.Types"
+
+instance Constructor C1_0List  where
+    conName _ = "[]"
+
+instance Constructor C1_1List where
+    conName   _ = ":"
+    conFixity _ = Infix RightAssociative 5
+
+-----
+
+type Rep1Either a = D1 D1Either (C1 C1_0Either (S1 NoSelector (Rec0 a))
+                             :+: C1 C1_1Either (S1 NoSelector Par1))
+
+instance Generic1 (Either a) where
+    type Rep1 (Either a) = Rep1Either a
+
+    from1 (Left l) = M1 (L1 (M1 (M1 (K1 l))))
+    from1 (Right r) = M1 (R1 (M1 (M1 (Par1 r))))
+
+    to1 (M1 (L1 (M1 (M1 (K1 l))))) = Left l
+    to1 (M1 (R1 (M1 (M1 (Par1 r))))) = Right r
+
+data D1Either
+data C1_0Either
+data C1_1Either
+
+instance Datatype D1Either where
+    datatypeName _ = "Either"
+    moduleName   _ = "Data.Either"
+
+instance Constructor C1_0Either where
+    conName _ = "Left"
+
+instance Constructor C1_1Either where
+    conName _ = "Right"
+
+-----
+
+type Rep1Maybe = D1 D1Maybe (C1 C1_0Maybe U1
+                         :+: C1 C1_1Maybe (S1 NoSelector Par1))
+
+instance Generic1 Maybe where
+    type Rep1 Maybe = Rep1Maybe
+
+    from1 Nothing  = M1 (L1 (M1 U1))
+    from1 (Just j) = M1 (R1 (M1 (M1 (Par1 j))))
+
+    to1 (M1 (L1 (M1 U1)))            = Nothing
+    to1 (M1 (R1 (M1 (M1 (Par1 j))))) = Just j
+
+data D1Maybe
+data C1_0Maybe
+data C1_1Maybe
+
+instance Datatype D1Maybe where
+    datatypeName _ = "Maybe"
+    -- As of base-4.7.0.0, Maybe is actually located in GHC.Base.
+    -- We don't need to worry about this for the versions of base
+    -- that this instance is defined for, however.
+    moduleName   _ = "Data.Maybe"
+
+instance Constructor C1_0Maybe where
+    conName _ = "Nothing"
+
+instance Constructor C1_1Maybe where
+    conName _ = "Just"
+
+-----
+
+type Rep1Tuple2 a = D1 D1Tuple2 (C1 C1_0Tuple2 (S1 NoSelector (Rec0 a)
+                                            :*: S1 NoSelector Par1))
+
+instance Generic1 ((,) a) where
+    type Rep1 ((,) a) = Rep1Tuple2 a
+    from1 (a, b) = M1 (M1 (M1 (K1 a) :*: M1 (Par1 b)))
+    to1 (M1 (M1 (M1 (K1 a) :*: M1 (Par1 b)))) = (a, b)
+
+data D1Tuple2
+data C1_0Tuple2
+
+instance Datatype D1Tuple2 where
+    datatypeName _ = "(,)"
+    moduleName   _ = "GHC.Tuple"
+
+instance Constructor C1_0Tuple2 where
+    conName _ = "(,)"
+
+-----
+
+type Rep1Tuple3 a b = D1 D1Tuple3 (C1 C1_0Tuple3 (S1 NoSelector (Rec0 a)
+                                             :*: (S1 NoSelector (Rec0 b)
+                                             :*:  S1 NoSelector Par1)))
+
+instance Generic1 ((,,) a b) where
+    type Rep1 ((,,) a b) = Rep1Tuple3 a b
+    from1 (a, b, c) = M1 (M1 (M1 (K1 a) :*: (M1 (K1 b) :*: M1 (Par1 c))))
+    to1 (M1 (M1 (M1 (K1 a) :*: (M1 (K1 b) :*: M1 (Par1 c))))) = (a, b, c)
+
+data D1Tuple3
+data C1_0Tuple3
+
+instance Datatype D1Tuple3 where
+    datatypeName _ = "(,,)"
+    moduleName   _ = "GHC.Tuple"
+
+instance Constructor C1_0Tuple3 where
+    conName _ = "(,,)"
+
+-----
+
+type Rep1Tuple4 a b c = D1 D1Tuple4 (C1 C1_0Tuple4 ((S1 NoSelector (Rec0 a)
+                                                :*:  S1 NoSelector (Rec0 b))
+                                                :*: (S1 NoSelector (Rec0 c)
+                                                :*:  S1 NoSelector Par1)))
+
+instance Generic1 ((,,,) a b c) where
+    type Rep1 ((,,,) a b c) = Rep1Tuple4 a b c
+
+    from1 (a, b, c, d) = M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+                             :*: (M1 (K1 c) :*: M1 (Par1 d))))
+
+    to1 (M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+             :*: (M1 (K1 c) :*: M1 (Par1 d)))))
+      = (a, b, c, d)
+
+data D1Tuple4
+data C1_0Tuple4
+
+instance Datatype D1Tuple4 where
+    datatypeName _ = "(,,,)"
+    moduleName _ = "GHC.Tuple"
+
+instance Constructor C1_0Tuple4 where
+    conName _ = "(,,,)"
+
+-----
+
+type Rep1Tuple5 a b c d = D1 D1Tuple5 (C1 C1_0Tuple5 ((S1 NoSelector (Rec0 a)
+                                                  :*:  S1 NoSelector (Rec0 b))
+                                                  :*: (S1 NoSelector (Rec0 c)
+                                                  :*: (S1 NoSelector (Rec0 d)
+                                                  :*:  S1 NoSelector Par1))))
+
+instance Generic1 ((,,,,) a b c d) where
+    type Rep1 ((,,,,) a b c d) = Rep1Tuple5 a b c d
+
+    from1 (a, b, c, d, e) = M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+                                :*: (M1 (K1 c) :*: (M1 (K1 d) :*: M1 (Par1 e)))))
+
+    to1 (M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+             :*: (M1 (K1 c) :*: (M1 (K1 d) :*: M1 (Par1 e))))))
+      = (a, b, c, d, e)
+
+data D1Tuple5
+data C1_0Tuple5
+
+instance Datatype D1Tuple5 where
+    datatypeName _ = "(,,,,)"
+    moduleName   _ = "GHC.Tuple"
+
+instance Constructor C1_0Tuple5 where
+    conName _ = "(,,,,)"
+
+-----
+
+type Rep1Tuple6 a b c d e =
+    D1 D1Tuple6 (C1 C1_0Tuple6 ((S1 NoSelector (Rec0 a)
+                            :*: (S1 NoSelector (Rec0 b)
+                            :*:  S1 NoSelector (Rec0 c)))
+                            :*: (S1 NoSelector (Rec0 d)
+                            :*: (S1 NoSelector (Rec0 e)
+                            :*:  S1 NoSelector Par1))))
+
+instance Generic1 ((,,,,,) a b c d e) where
+    type Rep1 ((,,,,,) a b c d e) = Rep1Tuple6 a b c d e
+
+    from1 (a, b, c, d, e, f) = M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+                                   :*: (M1 (K1 d) :*: (M1 (K1 e) :*: M1 (Par1 f)))))
+
+    to1 (M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+             :*: (M1 (K1 d) :*: (M1 (K1 e) :*: M1 (Par1 f))))))
+      = (a, b, c, d, e, f)
+
+data D1Tuple6
+data C1_0Tuple6
+
+instance Datatype D1Tuple6 where
+    datatypeName _ = "(,,,,,)"
+    moduleName   _ = "GHC.Tuple"
+
+instance Constructor C1_0Tuple6 where
+    conName _ = "(,,,,,)"
+
+-----
+
+type Rep1Tuple7 a b c d e f =
+    D1 D1Tuple7 (C1 C1_0Tuple7 ((S1 NoSelector (Rec0 a)
+                           :*:  (S1 NoSelector (Rec0 b)
+                           :*:   S1 NoSelector (Rec0 c)))
+                           :*: ((S1 NoSelector (Rec0 d)
+                           :*:   S1 NoSelector (Rec0 e))
+                           :*:  (S1 NoSelector (Rec0 f)
+                           :*:   S1 NoSelector Par1))))
+
+instance Generic1 ((,,,,,,) a b c d e f) where
+    type Rep1 ((,,,,,,) a b c d e f) = Rep1Tuple7 a b c d e f
+
+    from1 (a, b, c, d, e, f, g) = M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+                      :*: ((M1 (K1 d) :*: M1 (K1 e)) :*: (M1 (K1 f) :*: M1 (Par1 g)))))
+
+    to1 (M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+            :*: ((M1 (K1 d) :*: M1 (K1 e)) :*: (M1 (K1 f) :*: M1 (Par1 g))))))
+      = (a, b, c, d, e, f, g)
+
+data D1Tuple7
+data C1_0Tuple7
+
+instance Datatype D1Tuple7 where
+    datatypeName _ = "(,,,,,,)"
+    moduleName   _ = "GHC.Tuple"
+
+instance Constructor C1_0Tuple7 where
+    conName _ = "(,,,,,,)"
+#endif
+
+-----
+
+#if __GLASGOW_HASKELL__ < 701
+type Rep0Bool = D1 D1Bool (C1 C1_0Bool U1 :+: C1 C1_1Bool U1)
+
+instance Generic Bool where
+    type Rep Bool = Rep0Bool
+
+    from False = M1 (L1 (M1 U1))
+    from True = M1 (R1 (M1 U1))
+
+    to (M1 (L1 (M1 U1))) = False
+    to (M1 (R1 (M1 U1))) = True
+
+data D1Bool
+data C1_0Bool
+data C1_1Bool
+
+instance Datatype D1Bool where
+    datatypeName _ = "Bool"
+    moduleName _ = "GHC.Bool"
+
+instance Constructor C1_0Bool where
+    conName _ = "False"
+
+instance Constructor C1_1Bool where
+    conName _ = "True"
+
+-----
+
+data D_Char
+data C_Char
+
+instance Datatype D_Char where
+  datatypeName _ = "Char"
+  moduleName   _ = "GHC.Base"
+
+instance Constructor C_Char where
+  conName _ = "" -- JPM: I'm not sure this is the right implementation...
+
+type Rep0Char = D1 D_Char (C1 C_Char (S1 NoSelector (Rec0 Char)))
+
+instance Generic Char where
+  type Rep Char = Rep0Char
+  from x = M1 (M1 (M1 (K1 x)))
+  to (M1 (M1 (M1 (K1 x)))) = x
+
+-----
+
+data D_Double
+data C_Double
+
+instance Datatype D_Double where
+  datatypeName _ = "Double"
+  moduleName   _ = "GHC.Float"
+
+instance Constructor C_Double where
+  conName _ = "" -- JPM: I'm not sure this is the right implementation...
+
+type Rep0Double = D1 D_Double (C1 C_Double (S1 NoSelector (Rec0 Double)))
+
+instance Generic Double where
+  type Rep Double = Rep0Double
+  from x = M1 (M1 (M1 (K1 x)))
+  to (M1 (M1 (M1 (K1 x)))) = x
+
+-----
+
+type Rep0Either a b = D1 D1Either (C1 C1_0Either (S1 NoSelector (Rec0 a))
+                               :+: C1 C1_1Either (S1 NoSelector (Rec0 b)))
+
+instance Generic (Either a b) where
+    type Rep (Either a b) = Rep0Either a b
+
+    from (Left l)  = M1 (L1 (M1 (M1 (K1 l))))
+    from (Right r) = M1 (R1 (M1 (M1 (K1 r))))
+
+    to (M1 (L1 (M1 (M1 (K1 l))))) = Left l
+    to (M1 (R1 (M1 (M1 (K1 r))))) = Right r
+
+-----
+
+data D_Int
+data C_Int
+
+instance Datatype D_Int where
+  datatypeName _ = "Int"
+  moduleName   _ = "GHC.Int"
+
+instance Constructor C_Int where
+  conName _ = "" -- JPM: I'm not sure this is the right implementation...
+
+type Rep0Int = D1 D_Int (C1 C_Int (S1 NoSelector (Rec0 Int)))
+
+instance Generic Int where
+  type Rep Int = Rep0Int
+  from x = M1 (M1 (M1 (K1 x)))
+  to (M1 (M1 (M1 (K1 x)))) = x
+
+-----
+
+data D_Float
+data C_Float
+
+instance Datatype D_Float where
+  datatypeName _ = "Float"
+  moduleName   _ = "GHC.Float"
+
+instance Constructor C_Float where
+  conName _ = "" -- JPM: I'm not sure this is the right implementation...
+
+type Rep0Float = D1 D_Float (C1 C_Float (S1 NoSelector (Rec0 Float)))
+
+instance Generic Float where
+  type Rep Float = Rep0Float
+  from x = M1 (M1 (M1 (K1 x)))
+  to (M1 (M1 (M1 (K1 x)))) = x
+
+-----
+
+type Rep0List a =
+    D1 D1List (C1 C1_0List U1 :+: C1 C1_1List (S1 NoSelector (Rec0 a)
+                                           :*: S1 NoSelector (Rec0 [a])))
+
+instance Generic [a] where
+    type Rep [a] = Rep0List a
+
+    from []    = M1 (L1 (M1 U1))
+    from (h:t) = M1 (R1 (M1 (M1 (K1 h) :*: M1 (K1 t))))
+
+    to (M1 (L1 (M1 U1)))                         = []
+    to (M1 (R1 (M1 (M1 (K1 h) :*: M1 (K1 t))))) = h : t
+
+-----
+
+type Rep0Maybe a = D1 D1Maybe (C1 C1_0Maybe U1
+                           :+: C1 C1_1Maybe (S1 NoSelector (Rec0 a)))
+
+instance Generic (Maybe a) where
+    type Rep (Maybe a) = Rep0Maybe a
+
+    from Nothing  = M1 (L1 (M1 U1))
+    from (Just j) = M1 (R1 (M1 (M1 (K1 j))))
+
+    to (M1 (L1 (M1 U1)))          = Nothing
+    to (M1 (R1 (M1 (M1 (K1 j))))) = Just j
+
+-----
+
+type Rep0Ordering = D1 D1Ordering (C1 C1_0Ordering U1
+                              :+: (C1 C1_1Ordering U1 :+: C1 C1_2Ordering U1))
+
+instance Generic Ordering where
+    type Rep Ordering = Rep0Ordering
+
+    from LT = M1 (L1 (M1 U1))
+    from EQ = M1 (R1 (L1 (M1 U1)))
+    from GT = M1 (R1 (R1 (M1 U1)))
+
+    to (M1 (L1 (M1 U1))) = LT
+    to (M1 (R1 (L1 (M1 U1)))) = EQ
+    to (M1 (R1 (R1 (M1 U1)))) = GT
+
+data D1Ordering
+data C1_0Ordering
+data C1_1Ordering
+data C1_2Ordering
+
+instance Datatype D1Ordering where
+    datatypeName _ = "Ordering"
+    moduleName _ = "GHC.Ordering"
+
+instance Constructor C1_0Ordering where
+    conName _ = "LT"
+
+instance Constructor C1_1Ordering where
+    conName _ = "EQ"
+
+instance Constructor C1_2Ordering where
+    conName _ = "GT"
+
+-----
+
+type Rep0Unit = D1 D1Unit (C1 C1_0Unit U1)
+
+instance Generic () where
+    type Rep () = Rep0Unit
+    from () = M1 (M1 U1)
+    to (M1 (M1 U1)) = ()
+
+data D1Unit
+data C1_0Unit
+
+instance Datatype D1Unit where
+    datatypeName _ = "()"
+    moduleName _ = "GHC.Tuple"
+
+instance Constructor C1_0Unit where
+    conName _ = "()"
+
+-----
+
+type Rep0Tuple2 a b = D1 D1Tuple2 (C1 C1_0Tuple2 (S1 NoSelector (Rec0 a)
+                                              :*: S1 NoSelector (Rec0 b)))
+
+instance Generic (a, b) where
+    type Rep (a, b) = Rep0Tuple2 a b
+    from (a, b) = M1 (M1 (M1 (K1 a) :*: M1 (K1 b)))
+    to (M1 (M1 (M1 (K1 a) :*: M1 (K1 b)))) = (a, b)
+
+-----
+
+type Rep0Tuple3 a b c = D1 D1Tuple3 (C1 C1_0Tuple3 (S1 NoSelector (Rec0 a)
+                                               :*: (S1 NoSelector (Rec0 b)
+                                               :*:  S1 NoSelector (Rec0 c))))
+
+instance Generic (a, b, c) where
+    type Rep (a, b, c) = Rep0Tuple3 a b c
+    from (a, b, c) = M1 (M1 (M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c))))
+    to (M1 (M1 (M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c))))) = (a, b, c)
+
+-----
+
+type Rep0Tuple4 a b c d = D1 D1Tuple4 (C1 C1_0Tuple4 ((S1 NoSelector (Rec0 a)
+                                                  :*:  S1 NoSelector (Rec0 b))
+                                                  :*: (S1 NoSelector (Rec0 c)
+                                                  :*:  S1 NoSelector (Rec0 d))))
+
+instance Generic (a, b, c, d) where
+    type Rep (a, b, c, d) = Rep0Tuple4 a b c d
+
+    from (a, b, c, d) = M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+                            :*: (M1 (K1 c) :*: M1 (K1 d))))
+
+    to (M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+            :*: (M1 (K1 c) :*: M1 (K1 d)))))
+      = (a, b, c, d)
+
+-----
+
+type Rep0Tuple5 a b c d e = D1 D1Tuple5 (C1 C1_0Tuple5 ((S1 NoSelector (Rec0 a)
+                                                    :*:  S1 NoSelector (Rec0 b))
+                                                    :*: (S1 NoSelector (Rec0 c)
+                                                    :*: (S1 NoSelector (Rec0 d)
+                                                    :*:  S1 NoSelector (Rec0 e)))))
+
+instance Generic (a, b, c, d, e) where
+    type Rep (a, b, c, d, e) = Rep0Tuple5 a b c d e
+
+    from (a, b, c, d, e) = M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+                               :*: (M1 (K1 c) :*: (M1 (K1 d) :*: M1 (K1 e)))))
+
+    to (M1 (M1 ((M1 (K1 a) :*: M1 (K1 b))
+            :*: (M1 (K1 c) :*: (M1 (K1 d) :*: M1 (K1 e))))))
+      = (a, b, c, d, e)
+
+-----
+
+type Rep0Tuple6 a b c d e f = D1 D1Tuple6 (C1 C1_0Tuple6 ((S1 NoSelector (Rec0 a)
+                                                      :*: (S1 NoSelector (Rec0 b)
+                                                      :*:  S1 NoSelector (Rec0 c)))
+                                                      :*: (S1 NoSelector (Rec0 d)
+                                                      :*: (S1 NoSelector (Rec0 e)
+                                                      :*:  S1 NoSelector (Rec0 f)))))
+
+instance Generic (a, b, c, d, e, f) where
+    type Rep (a, b, c, d, e, f) = Rep0Tuple6 a b c d e f
+
+    from (a, b, c, d, e, f) = M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+                                  :*: (M1 (K1 d) :*: (M1 (K1 e) :*: M1 (K1 f)))))
+
+    to (M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+            :*: (M1 (K1 d) :*: (M1 (K1 e) :*: M1 (K1 f))))))
+      = (a, b, c, d, e, f)
+
+-----
+
+type Rep0Tuple7 a b c d e f g
+    = D1 D1Tuple7 (C1 C1_0Tuple7 ((S1 NoSelector (Rec0 a)
+                             :*:  (S1 NoSelector (Rec0 b)
+                             :*:   S1 NoSelector (Rec0 c)))
+                             :*: ((S1 NoSelector (Rec0 d)
+                             :*:   S1 NoSelector (Rec0 e))
+                             :*:  (S1 NoSelector (Rec0 f)
+                             :*:   S1 NoSelector (Rec0 g)))))
+
+instance Generic (a, b, c, d, e, f, g) where
+    type Rep (a, b, c, d, e, f, g) = Rep0Tuple7 a b c d e f g
+
+    from (a, b, c, d, e, f, g) = M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+                     :*: ((M1 (K1 d) :*: M1 (K1 e)) :*: (M1 (K1 f) :*: M1 (K1 g)))))
+
+    to (M1 (M1 ((M1 (K1 a) :*: (M1 (K1 b) :*: M1 (K1 c)))
+           :*: ((M1 (K1 d) :*: M1 (K1 e)) :*: (M1 (K1 f) :*: M1 (K1 g))))))
+      = (a, b, c, d, e, f, g)
 
 #endif
src/Generics/Deriving/TH.hs view
@@ -25,12 +25,10 @@     , deriveConstructors
     , deriveSelectors
 
-#if __GLASGOW_HASKELL__ < 701
     , deriveAll
     , deriveRepresentable0
     , deriveRep0
     , simplInstance
-#endif
   ) where
 
 import Generics.Deriving.Base