{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeSynonymInstances #-}

#if __GLASGOW_HASKELL__ >= 711
{-# LANGUAGE Safe #-}
#elif __GLASGOW_HASKELL__ >= 701
{-# LANGUAGE Trustworthy #-}
#endif

#if __GLASGOW_HASKELL__ >= 702
{-# LANGUAGE DeriveGeneric #-}
#endif

#if __GLASGOW_HASKELL__ >= 705
{-# LANGUAGE PolyKinds #-}
#endif

{-# OPTIONS_GHC -fno-warn-orphans #-}

module Generics.Deriving.Instances (
-- Only instances from Generics.Deriving.Base
-- and the Generic1 instances
#if !(MIN_VERSION_base(4,16,0))
    Rep0Tuple8
  , Rep0Tuple9
  , Rep0Tuple10
  , Rep0Tuple11
  , Rep0Tuple12
  , Rep0Tuple13
  , Rep0Tuple14
  , Rep0Tuple15
  , Rep1Tuple8
  , Rep1Tuple9
  , Rep1Tuple10
  , Rep1Tuple11
  , Rep1Tuple12
  , Rep1Tuple13
  , Rep1Tuple14
  , Rep1Tuple15
#endif
#if !(MIN_VERSION_base(4,14,0))
  , Rep0Kleisli
  , Rep1Kleisli
#endif
#if !(MIN_VERSION_base(4,12,0))
  , Rep0Down
  , Rep1Down
#endif
#if !(MIN_VERSION_base(4,9,0))
  , Rep0ExitCode
  , Rep0Version
  , Rep1ConSum
  , Rep1ConProduct
  , Rep1ConCompose
  , Rep1K1
  , Rep1M1
  , Rep1Par1
  , Rep1Rec1
  , Rep1U1
  , Rep0V1
  , Rep1V1
  , Rep0UAddr
  , Rep1UAddr
  , Rep0UChar
  , Rep1UChar
  , Rep0UDouble
  , Rep1UDouble
  , Rep0UFloat
  , Rep1UFloat
  , Rep0UInt
  , Rep1UInt
  , Rep0UWord
  , Rep1UWord
# if MIN_VERSION_base(4,4,0)
  , Rep0Complex
  , Rep1Complex
# endif
# if MIN_VERSION_base(4,7,0)
  , Rep1Proxy
# endif
#endif
#if !(MIN_VERSION_base(4,7,0))
  , 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 !(MIN_VERSION_base(4,6,0))
  , Rep1Either
  , Rep1List
  , Rep1Maybe
  , Rep1Tuple2
  , Rep1Tuple3
  , Rep1Tuple4
  , Rep1Tuple5
  , Rep1Tuple6
  , Rep1Tuple7
#endif
#if !(MIN_VERSION_base(4,4,0))
  , Rep0Bool
  , Rep0Char
  , Rep0Double
  , Rep0Either
  , Rep0Int
  , Rep0Float
  , Rep0List
  , Rep0Maybe
  , Rep0Ordering
  , Rep0Tuple2
  , Rep0Tuple3
  , Rep0Tuple4
  , Rep0Tuple5
  , Rep0Tuple6
  , Rep0Tuple7
  , Rep0Unit
#endif
  ) where

#if !(MIN_VERSION_base(4,7,0))
import Control.Applicative
import Data.Monoid
#endif

#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,9,0))
import Data.Complex (Complex(..))
#endif

#if MIN_VERSION_base(4,7,0) && !(MIN_VERSION_base(4,9,0))
import Data.Proxy (Proxy(..))
#endif

#if !(MIN_VERSION_base(4,9,0))
import Data.Version (Version(..))
import System.Exit (ExitCode(..))
#endif

#if !(MIN_VERSION_base(4,12,0))
# if MIN_VERSION_base(4,6,0)
import Data.Ord (Down(..))
# else
import GHC.Exts (Down(..))
# endif
#endif

#if !(MIN_VERSION_base(4,14,0))
import Control.Arrow (Kleisli(..))
#endif

#if !(MIN_VERSION_base(4,16,0))
import Generics.Deriving.Base.Internal
#endif

#if !(MIN_VERSION_base(4,16,0))
# if MIN_VERSION_base(4,6,0)
type Rep0Tuple8  a b c d e f g h               = Rep (a, b, c, d, e, f, g, h)
type Rep0Tuple9  a b c d e f g h i             = Rep (a, b, c, d, e, f, g, h, i)
type Rep0Tuple10 a b c d e f g h i j           = Rep (a, b, c, d, e, f, g, h, i, j)
type Rep0Tuple11 a b c d e f g h i j k         = Rep (a, b, c, d, e, f, g, h, i, j, k)
type Rep0Tuple12 a b c d e f g h i j k l       = Rep (a, b, c, d, e, f, g, h, i, j, k, l)
type Rep0Tuple13 a b c d e f g h i j k l m     = Rep (a, b, c, d, e, f, g, h, i, j, k, l, m)
type Rep0Tuple14 a b c d e f g h i j k l m n   = Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
type Rep0Tuple15 a b c d e f g h i j k l m n o = Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
type Rep1Tuple8  a b c d e f g               = Rep1 ((,,,,,,,) a b c d e f g)
type Rep1Tuple9  a b c d e f g h             = Rep1 ((,,,,,,,,) a b c d e f g h)
type Rep1Tuple10 a b c d e f g h i           = Rep1 ((,,,,,,,,,) a b c d e f g h i)
type Rep1Tuple11 a b c d e f g h i j         = Rep1 ((,,,,,,,,,,) a b c d e f g h i j)
type Rep1Tuple12 a b c d e f g h i j k       = Rep1 ((,,,,,,,,,,,) a b c d e f g h i j k)
type Rep1Tuple13 a b c d e f g h i j k l     = Rep1 ((,,,,,,,,,,,,) a b c d e f g h i j k l)
type Rep1Tuple14 a b c d e f g h i j k l m   = Rep1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m)
type Rep1Tuple15 a b c d e f g h i j k l m n = Rep1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n)
deriving instance Generic (a, b, c, d, e, f, g, h)
deriving instance Generic (a, b, c, d, e, f, g, h, i)
deriving instance Generic (a, b, c, d, e, f, g, h, i, j)
deriving instance Generic (a, b, c, d, e, f, g, h, i, j, k)
deriving instance Generic (a, b, c, d, e, f, g, h, i, j, k, l)
deriving instance Generic (a, b, c, d, e, f, g, h, i, j, k, l, m)
deriving instance Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
deriving instance Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
deriving instance Generic1 ((,,,,,,,) a b c d e f g)
deriving instance Generic1 ((,,,,,,,,) a b c d e f g h)
deriving instance Generic1 ((,,,,,,,,,) a b c d e f g h i)
deriving instance Generic1 ((,,,,,,,,,,) a b c d e f g h i j)
deriving instance Generic1 ((,,,,,,,,,,,) a b c d e f g h i j k)
deriving instance Generic1 ((,,,,,,,,,,,,) a b c d e f g h i j k l)
deriving instance Generic1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m)
deriving instance Generic1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n)
# else
type Rep0Tuple8 a b c d e f g h = D1
                                    D1Tuple8
                                    (C1
                                       C1_0Tuple8
                                       (((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)
                                                                            :*: S1
                                                                                               NoSelector
                                                                                               (Rec0
                                                                                                  h)))))
type Rep1Tuple8 a b c d e f g = D1
                                  D1Tuple8
                                  (C1
                                     C1_0Tuple8
                                     (((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)
                                                                          :*: S1
                                                                                             NoSelector
                                                                                             Par1))))

instance Generic (a, b, c, d, e, f, g, h) where
    type Rep (a, b, c, d, e, f, g, h) = Rep0Tuple8 a b c d e f g h

    from x
      = M1
          (case x of {
             (,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             (M1 (K1 g4))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g5))
                             (M1 (K1 g6)))
                          ((:*:)
                             (M1 (K1 g7))
                             (M1 (K1 g8))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       (M1 (K1 g2)))
                                                                   ((:*:) (M1 (K1 g3))
                                                                                       (M1 (K1 g4))))
                                               ((:*:) ((:*:) (M1 (K1 g5))
                                                                                       (M1 (K1 g6)))
                                                                   ((:*:) (M1 (K1 g7))
                                                                                       (M1 (K1 g8))))))
            -> (,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 }

instance Generic1 ((,,,,,,,) a b c d e f g) where
    type Rep1 ((,,,,,,,) a b c d e f g) = Rep1Tuple8 a b c d e f g

    from1 x
      = M1
          (case x of {
             (,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             (M1 (K1 g4))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g5))
                             (M1 (K1 g6)))
                          ((:*:)
                             (M1 (K1 g7))
                             (M1 (Par1 g8))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       (M1 g2))
                                                                   ((:*:) (M1 g3)
                                                                                       (M1 g4)))
                                               ((:*:) ((:*:) (M1 g5)
                                                                                       (M1 g6))
                                                                   ((:*:) (M1 g7)
                                                                                       (M1 g8)))))
            -> (,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unPar1 g8) }

data D1Tuple8
data C1_0Tuple8

instance Datatype D1Tuple8 where
    datatypeName _ = "(,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple8 where
    conName _ = "(,,,,,,,)"

-----

type Rep0Tuple9 a b c d e f g h i = D1
                                      D1Tuple9
                                      (C1
                                         C1_0Tuple9
                                         (((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)
                                                                              :*: (S1
                                                                                                  NoSelector
                                                                                                  (Rec0
                                                                                                     h)
                                                                                                :*: S1
                                                                                                                   NoSelector
                                                                                                                   (Rec0
                                                                                                                      i))))))
type Rep1Tuple9 a b c d e f g h = D1
                                    D1Tuple9
                                    (C1
                                       C1_0Tuple9
                                       (((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)
                                                                            :*: (S1
                                                                                                NoSelector
                                                                                                (Rec0
                                                                                                   h)
                                                                                              :*: S1
                                                                                                                 NoSelector
                                                                                                                 Par1)))))

instance Generic (a, b, c, d, e, f, g, h, i) where
    type Rep (a, b, c, d, e, f, g, h, i) = Rep0Tuple9 a b c d e f g h i

    from x
      = M1
          (case x of {
             (,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             (M1 (K1 g4))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g5))
                             (M1 (K1 g6)))
                          ((:*:)
                             (M1 (K1 g7))
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (K1 g9)))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       (M1 (K1 g2)))
                                                                   ((:*:) (M1 (K1 g3))
                                                                                       (M1 (K1 g4))))
                                               ((:*:) ((:*:) (M1 (K1 g5))
                                                                                       (M1 (K1 g6)))
                                                                   ((:*:) (M1 (K1 g7))
                                                                                       ((:*:) (M1 (K1 g8))
                                                                                                           (M1 (K1 g9)))))))
            -> (,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 }

instance Generic1 ((,,,,,,,,) a b c d e f g h) where
    type Rep1 ((,,,,,,,,) a b c d e f g h) = Rep1Tuple9 a b c d e f g h

    from1 x
      = M1
          (case x of {
             (,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             (M1 (K1 g4))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g5))
                             (M1 (K1 g6)))
                          ((:*:)
                             (M1 (K1 g7))
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (Par1 g9)))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       (M1 g2))
                                                                   ((:*:) (M1 g3)
                                                                                       (M1 g4)))
                                               ((:*:) ((:*:) (M1 g5)
                                                                                       (M1 g6))
                                                                   ((:*:) (M1 g7)
                                                                                       ((:*:) (M1 g8)
                                                                                                           (M1 g9))))))
            -> (,,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unK1 g8)
                 (unPar1 g9) }

data D1Tuple9
data C1_0Tuple9

instance Datatype D1Tuple9 where
    datatypeName _ = "(,,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple9 where
    conName _ = "(,,,,,,,,)"

-----

type Rep0Tuple10 a b c d e f g h i j = D1
                                         D1Tuple10
                                         (C1
                                            C1_0Tuple10
                                            (((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))
                                                               :*: (S1
                                                                                   NoSelector
                                                                                   (Rec0
                                                                                      h)
                                                                                 :*: (S1
                                                                                                     NoSelector
                                                                                                     (Rec0
                                                                                                        i)
                                                                                                   :*: S1
                                                                                                                      NoSelector
                                                                                                                      (Rec0
                                                                                                                         j))))))
type Rep1Tuple10 a b c d e f g h i = D1
                                       D1Tuple10
                                       (C1
                                          C1_0Tuple10
                                          (((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))
                                                             :*: (S1
                                                                                 NoSelector
                                                                                 (Rec0
                                                                                    h)
                                                                               :*: (S1
                                                                                                   NoSelector
                                                                                                   (Rec0
                                                                                                      i)
                                                                                                 :*: S1
                                                                                                                    NoSelector
                                                                                                                    Par1)))))

instance Generic (a, b, c, d, e, f, g, h, i, j) where
    type Rep (a, b, c, d, e, f, g, h, i, j) = Rep0Tuple10 a b c d e f g h i j

    from x
      = M1
          (case x of {
             (,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g6))
                             (M1 (K1 g7)))
                          ((:*:)
                             (M1 (K1 g8))
                             ((:*:)
                                (M1 (K1 g9))
                                (M1 (K1 g10)))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       (M1 (K1 g2)))
                                                                   ((:*:) (M1 (K1 g3))
                                                                                       ((:*:) (M1 (K1 g4))
                                                                                                           (M1 (K1 g5)))))
                                               ((:*:) ((:*:) (M1 (K1 g6))
                                                                                       (M1 (K1 g7)))
                                                                   ((:*:) (M1 (K1 g8))
                                                                                       ((:*:) (M1 (K1 g9))
                                                                                                           (M1 (K1 g10)))))))
            -> (,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 }

instance Generic1
             ((,,,,,,,,,) a b c d e f g h i) where
    type Rep1 ((,,,,,,,,,) a b c d e f g h i) = Rep1Tuple10 a b c d e f g h i

    from1 x
      = M1
          (case x of {
             (,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g6))
                             (M1 (K1 g7)))
                          ((:*:)
                             (M1 (K1 g8))
                             ((:*:)
                                (M1 (K1 g9))
                                (M1 (Par1 g10)))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       (M1 g2))
                                                                   ((:*:) (M1 g3)
                                                                                       ((:*:) (M1 g4)
                                                                                                           (M1 g5))))
                                               ((:*:) ((:*:) (M1 g6)
                                                                                       (M1 g7))
                                                                   ((:*:) (M1 g8)
                                                                                       ((:*:) (M1 g9)
                                                                                                           (M1 g10))))))
            -> (,,,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unK1 g8)
                 (unK1 g9) (unPar1 g10) }

data D1Tuple10
data C1_0Tuple10

instance Datatype D1Tuple10 where
    datatypeName _ = "(,,,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple10 where
    conName _ = "(,,,,,,,,,)"

-----

type Rep0Tuple11 a b c d e f g h i j k = D1
                                           D1Tuple11
                                           (C1
                                              C1_0Tuple11
                                              (((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)
                                                                                    :*: S1
                                                                                                       NoSelector
                                                                                                       (Rec0
                                                                                                          h)))
                                                                 :*: (S1
                                                                                     NoSelector
                                                                                     (Rec0
                                                                                        i)
                                                                                   :*: (S1
                                                                                                       NoSelector
                                                                                                       (Rec0
                                                                                                          j)
                                                                                                     :*: S1
                                                                                                                        NoSelector
                                                                                                                        (Rec0
                                                                                                                           k))))))
type Rep1Tuple11 a b c d e f g h i j = D1
                                         D1Tuple11
                                         (C1
                                            C1_0Tuple11
                                            (((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)
                                                                                  :*: S1
                                                                                                     NoSelector
                                                                                                     (Rec0
                                                                                                        h)))
                                                               :*: (S1
                                                                                   NoSelector
                                                                                   (Rec0
                                                                                      i)
                                                                                 :*: (S1
                                                                                                     NoSelector
                                                                                                     (Rec0
                                                                                                        j)
                                                                                                   :*: S1
                                                                                                                      NoSelector
                                                                                                                      Par1)))))

instance Generic
             (a, b, c, d, e, f, g, h, i, j, k) where
    type Rep (a, b, c, d, e, f, g, h, i, j, k) = Rep0Tuple11 a b c d e f g h i j k

    from x
      = M1
          (case x of {
             (,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g6))
                             ((:*:)
                                (M1 (K1 g7))
                                (M1 (K1 g8))))
                          ((:*:)
                             (M1 (K1 g9))
                             ((:*:)
                                (M1 (K1 g10))
                                (M1 (K1 g11)))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       (M1 (K1 g2)))
                                                                   ((:*:) (M1 (K1 g3))
                                                                                       ((:*:) (M1 (K1 g4))
                                                                                                           (M1 (K1 g5)))))
                                               ((:*:) ((:*:) (M1 (K1 g6))
                                                                                       ((:*:) (M1 (K1 g7))
                                                                                                           (M1 (K1 g8))))
                                                                   ((:*:) (M1 (K1 g9))
                                                                                       ((:*:) (M1 (K1 g10))
                                                                                                           (M1 (K1 g11)))))))
            -> (,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 }

instance Generic1
             ((,,,,,,,,,,) a b c d e f g h i j) where
    type Rep1 ((,,,,,,,,,,) a b c d e f g h i j) = Rep1Tuple11 a b c d e f g h i j

    from1 x
      = M1
          (case x of {
             (,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             (M1 (K1 g2)))
                          ((:*:)
                             (M1 (K1 g3))
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g6))
                             ((:*:)
                                (M1 (K1 g7))
                                (M1 (K1 g8))))
                          ((:*:)
                             (M1 (K1 g9))
                             ((:*:)
                                (M1 (K1 g10))
                                (M1 (Par1 g11)))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       (M1 g2))
                                                                   ((:*:) (M1 g3)
                                                                                       ((:*:) (M1 g4)
                                                                                                           (M1 g5))))
                                               ((:*:) ((:*:) (M1 g6)
                                                                                       ((:*:) (M1 g7)
                                                                                                           (M1 g8)))
                                                                   ((:*:) (M1 g9)
                                                                                       ((:*:) (M1 g10)
                                                                                                           (M1 g11))))))
            -> (,,,,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unK1 g8)
                 (unK1 g9) (unK1 g10)
                 (unPar1 g11) }

data D1Tuple11
data C1_0Tuple11

instance Datatype D1Tuple11 where
    datatypeName _ = "(,,,,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple11 where
    conName _ = "(,,,,,,,,,,)"

-----

type Rep0Tuple12 a b c d e f g h i j k l = D1
                                             D1Tuple12
                                             (C1
                                                C1_0Tuple12
                                                (((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)
                                                                    :*: (S1
                                                                                        NoSelector
                                                                                        (Rec0
                                                                                           h)
                                                                                      :*: S1
                                                                                                         NoSelector
                                                                                                         (Rec0
                                                                                                            i)))
                                                                   :*: (S1
                                                                                       NoSelector
                                                                                       (Rec0
                                                                                          j)
                                                                                     :*: (S1
                                                                                                         NoSelector
                                                                                                         (Rec0
                                                                                                            k)
                                                                                                       :*: S1
                                                                                                                          NoSelector
                                                                                                                          (Rec0
                                                                                                                             l))))))
type Rep1Tuple12 a b c d e f g h i j k = D1
                                           D1Tuple12
                                           (C1
                                              C1_0Tuple12
                                              (((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)
                                                                  :*: (S1
                                                                                      NoSelector
                                                                                      (Rec0
                                                                                         h)
                                                                                    :*: S1
                                                                                                       NoSelector
                                                                                                       (Rec0
                                                                                                          i)))
                                                                 :*: (S1
                                                                                     NoSelector
                                                                                     (Rec0
                                                                                        j)
                                                                                   :*: (S1
                                                                                                       NoSelector
                                                                                                       (Rec0
                                                                                                          k)
                                                                                                     :*: S1
                                                                                                                        NoSelector
                                                                                                                        Par1)))))

instance Generic
             (a, b, c, d, e, f, g, h, i, j, k, l) where
    type Rep (a, b, c, d, e, f, g, h, i, j, k, l) = Rep0Tuple12 a b c d e f g h i j k l

    from x
      = M1
          (case x of {
             (,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             (M1 (K1 g4))
                             ((:*:)
                                (M1 (K1 g5))
                                (M1 (K1 g6)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g7))
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (K1 g9))))
                          ((:*:)
                             (M1 (K1 g10))
                             ((:*:)
                                (M1 (K1 g11))
                                (M1 (K1 g12)))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       ((:*:) (M1 (K1 g2))
                                                                                                           (M1 (K1 g3))))
                                                                   ((:*:) (M1 (K1 g4))
                                                                                       ((:*:) (M1 (K1 g5))
                                                                                                           (M1 (K1 g6)))))
                                               ((:*:) ((:*:) (M1 (K1 g7))
                                                                                       ((:*:) (M1 (K1 g8))
                                                                                                           (M1 (K1 g9))))
                                                                   ((:*:) (M1 (K1 g10))
                                                                                       ((:*:) (M1 (K1 g11))
                                                                                                           (M1 (K1 g12)))))))
            -> (,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 }

instance Generic1
             ((,,,,,,,,,,,) a b c d e f g h i j k) where
    type Rep1 ((,,,,,,,,,,,) a b c d e f g h i j k) = Rep1Tuple12 a b c d e f g h i j k

    from1 x
      = M1
          (case x of {
             (,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             (M1 (K1 g4))
                             ((:*:)
                                (M1 (K1 g5))
                                (M1 (K1 g6)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g7))
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (K1 g9))))
                          ((:*:)
                             (M1 (K1 g10))
                             ((:*:)
                                (M1 (K1 g11))
                                (M1 (Par1 g12)))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       ((:*:) (M1 g2)
                                                                                                           (M1 g3)))
                                                                   ((:*:) (M1 g4)
                                                                                       ((:*:) (M1 g5)
                                                                                                           (M1 g6))))
                                               ((:*:) ((:*:) (M1 g7)
                                                                                       ((:*:) (M1 g8)
                                                                                                           (M1 g9)))
                                                                   ((:*:) (M1 g10)
                                                                                       ((:*:) (M1 g11)
                                                                                                           (M1 g12))))))
            -> (,,,,,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unK1 g8)
                 (unK1 g9) (unK1 g10)
                 (unK1 g11) (unPar1 g12) }

data D1Tuple12
data C1_0Tuple12

instance Datatype D1Tuple12 where
    datatypeName _ = "(,,,,,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple12 where
    conName _ = "(,,,,,,,,,,,)"

-----

type Rep0Tuple13 a b c d e f g h i j k l m = D1
                                               D1Tuple13
                                               (C1
                                                  C1_0Tuple13
                                                  (((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)
                                                                      :*: (S1
                                                                                          NoSelector
                                                                                          (Rec0
                                                                                             h)
                                                                                        :*: S1
                                                                                                           NoSelector
                                                                                                           (Rec0
                                                                                                              i)))
                                                                     :*: ((S1
                                                                                          NoSelector
                                                                                          (Rec0
                                                                                             j)
                                                                                        :*: S1
                                                                                                           NoSelector
                                                                                                           (Rec0
                                                                                                              k))
                                                                                       :*: (S1
                                                                                                           NoSelector
                                                                                                           (Rec0
                                                                                                              l)
                                                                                                         :*: S1
                                                                                                                            NoSelector
                                                                                                                            (Rec0
                                                                                                                               m))))))
type Rep1Tuple13 a b c d e f g h i j k l = D1
                                             D1Tuple13
                                             (C1
                                                C1_0Tuple13
                                                (((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)
                                                                    :*: (S1
                                                                                        NoSelector
                                                                                        (Rec0
                                                                                           h)
                                                                                      :*: S1
                                                                                                         NoSelector
                                                                                                         (Rec0
                                                                                                            i)))
                                                                   :*: ((S1
                                                                                        NoSelector
                                                                                        (Rec0
                                                                                           j)
                                                                                      :*: S1
                                                                                                         NoSelector
                                                                                                         (Rec0
                                                                                                            k))
                                                                                     :*: (S1
                                                                                                         NoSelector
                                                                                                         (Rec0
                                                                                                            l)
                                                                                                       :*: S1
                                                                                                                          NoSelector
                                                                                                                          Par1)))))

data D1Tuple13
data C1_0Tuple13

instance Generic
             (a, b, c, d, e, f, g, h, i, j, k, l, m) where
    type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m) = Rep0Tuple13 a b c d e f g h i j k l m

    from x
      = M1
          (case x of {
             (,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             (M1 (K1 g4))
                             ((:*:)
                                (M1 (K1 g5))
                                (M1 (K1 g6)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g7))
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (K1 g9))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g10))
                                (M1 (K1 g11)))
                             ((:*:)
                                (M1 (K1 g12))
                                (M1 (K1 g13)))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       ((:*:) (M1 (K1 g2))
                                                                                                           (M1 (K1 g3))))
                                                                   ((:*:) (M1 (K1 g4))
                                                                                       ((:*:) (M1 (K1 g5))
                                                                                                           (M1 (K1 g6)))))
                                               ((:*:) ((:*:) (M1 (K1 g7))
                                                                                       ((:*:) (M1 (K1 g8))
                                                                                                           (M1 (K1 g9))))
                                                                   ((:*:) ((:*:) (M1 (K1 g10))
                                                                                                           (M1 (K1 g11)))
                                                                                       ((:*:) (M1 (K1 g12))
                                                                                                           (M1 (K1 g13)))))))
            -> (,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13 }

instance Generic1
             ((,,,,,,,,,,,,) a b c d e f g h i j k l) where
    type Rep1 ((,,,,,,,,,,,,) a b c d e f g h i j k l) = Rep1Tuple13 a b c d e f g h i j k l

    from1 x
      = M1
          (case x of {
             (,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             (M1 (K1 g4))
                             ((:*:)
                                (M1 (K1 g5))
                                (M1 (K1 g6)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g7))
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (K1 g9))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g10))
                                (M1 (K1 g11)))
                             ((:*:)
                                (M1 (K1 g12))
                                (M1 (Par1 g13)))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       ((:*:) (M1 g2)
                                                                                                           (M1 g3)))
                                                                   ((:*:) (M1 g4)
                                                                                       ((:*:) (M1 g5)
                                                                                                           (M1 g6))))
                                               ((:*:) ((:*:) (M1 g7)
                                                                                       ((:*:) (M1 g8)
                                                                                                           (M1 g9)))
                                                                   ((:*:) ((:*:) (M1 g10)
                                                                                                           (M1 g11))
                                                                                       ((:*:) (M1 g12)
                                                                                                           (M1 g13))))))
            -> (,,,,,,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unK1 g8)
                 (unK1 g9) (unK1 g10)
                 (unK1 g11) (unK1 g12)
                 (unPar1 g13) }

instance Datatype D1Tuple13 where
    datatypeName _ = "(,,,,,,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple13 where
    conName _ = "(,,,,,,,,,,,,)"

-----

type Rep0Tuple14 a b c d e f g h i j k l m n = D1
                                                 D1Tuple14
                                                 (C1
                                                    C1_0Tuple14
                                                    (((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))))
                                                     :*: ((S1
                                                                          NoSelector
                                                                          (Rec0
                                                                             h)
                                                                        :*: (S1
                                                                                            NoSelector
                                                                                            (Rec0
                                                                                               i)
                                                                                          :*: S1
                                                                                                             NoSelector
                                                                                                             (Rec0
                                                                                                                j)))
                                                                       :*: ((S1
                                                                                            NoSelector
                                                                                            (Rec0
                                                                                               k)
                                                                                          :*: S1
                                                                                                             NoSelector
                                                                                                             (Rec0
                                                                                                                l))
                                                                                         :*: (S1
                                                                                                             NoSelector
                                                                                                             (Rec0
                                                                                                                m)
                                                                                                           :*: S1
                                                                                                                              NoSelector
                                                                                                                              (Rec0
                                                                                                                                 n))))))
type Rep1Tuple14 a b c d e f g h i j k l m = D1
                                               D1Tuple14
                                               (C1
                                                  C1_0Tuple14
                                                  (((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))))
                                                   :*: ((S1
                                                                        NoSelector
                                                                        (Rec0
                                                                           h)
                                                                      :*: (S1
                                                                                          NoSelector
                                                                                          (Rec0
                                                                                             i)
                                                                                        :*: S1
                                                                                                           NoSelector
                                                                                                           (Rec0
                                                                                                              j)))
                                                                     :*: ((S1
                                                                                          NoSelector
                                                                                          (Rec0
                                                                                             k)
                                                                                        :*: S1
                                                                                                           NoSelector
                                                                                                           (Rec0
                                                                                                              l))
                                                                                       :*: (S1
                                                                                                           NoSelector
                                                                                                           (Rec0
                                                                                                              m)
                                                                                                         :*: S1
                                                                                                                            NoSelector
                                                                                                                            Par1)))))

instance Generic
             (a, b, c, d, e, f, g, h, i, j, k, l, m, n) where
    type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = Rep0Tuple14 a b c d e f g h i j k l m n

    from x
      = M1
          (case x of {
             (,,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13 g14
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))
                             ((:*:)
                                (M1 (K1 g6))
                                (M1 (K1 g7)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g8))
                             ((:*:)
                                (M1 (K1 g9))
                                (M1 (K1 g10))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g11))
                                (M1 (K1 g12)))
                             ((:*:)
                                (M1 (K1 g13))
                                (M1 (K1 g14)))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       ((:*:) (M1 (K1 g2))
                                                                                                           (M1 (K1 g3))))
                                                                   ((:*:) ((:*:) (M1 (K1 g4))
                                                                                                           (M1 (K1 g5)))
                                                                                       ((:*:) (M1 (K1 g6))
                                                                                                           (M1 (K1 g7)))))
                                               ((:*:) ((:*:) (M1 (K1 g8))
                                                                                       ((:*:) (M1 (K1 g9))
                                                                                                           (M1 (K1 g10))))
                                                                   ((:*:) ((:*:) (M1 (K1 g11))
                                                                                                           (M1 (K1 g12)))
                                                                                       ((:*:) (M1 (K1 g13))
                                                                                                           (M1 (K1 g14)))))))
            -> (,,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13 g14 }

instance Generic1
             ((,,,,,,,,,,,,,) a b c d e f g h i j k l m) where
    type Rep1 ((,,,,,,,,,,,,,) a b c d e f g h i j k l m) = Rep1Tuple14 a b c d e f g h i j k l m

    from1 x
      = M1
          (case x of {
             (,,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13 g14
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))
                             ((:*:)
                                (M1 (K1 g6))
                                (M1 (K1 g7)))))
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g8))
                             ((:*:)
                                (M1 (K1 g9))
                                (M1 (K1 g10))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g11))
                                (M1 (K1 g12)))
                             ((:*:)
                                (M1 (K1 g13))
                                (M1 (Par1 g14)))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       ((:*:) (M1 g2)
                                                                                                           (M1 g3)))
                                                                   ((:*:) ((:*:) (M1 g4)
                                                                                                           (M1 g5))
                                                                                       ((:*:) (M1 g6)
                                                                                                           (M1 g7))))
                                               ((:*:) ((:*:) (M1 g8)
                                                                                       ((:*:) (M1 g9)
                                                                                                           (M1 g10)))
                                                                   ((:*:) ((:*:) (M1 g11)
                                                                                                           (M1 g12))
                                                                                       ((:*:) (M1 g13)
                                                                                                           (M1 g14))))))
            -> (,,,,,,,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unK1 g8)
                 (unK1 g9) (unK1 g10)
                 (unK1 g11) (unK1 g12)
                 (unK1 g13) (unPar1 g14) }

data D1Tuple14
data C1_0Tuple14

instance Datatype D1Tuple14 where
    datatypeName _ = "(,,,,,,,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple14 where
    conName _ = "(,,,,,,,,,,,,,)"

-----

type Rep0Tuple15 a b c d e f g h i j k l m n o = D1
                                                   D1Tuple15
                                                   (C1
                                                      C1_0Tuple15
                                                      (((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))))
                                                       :*: (((S1
                                                                             NoSelector
                                                                             (Rec0
                                                                                h)
                                                                           :*: S1
                                                                                              NoSelector
                                                                                              (Rec0
                                                                                                 i))
                                                                          :*: (S1
                                                                                              NoSelector
                                                                                              (Rec0
                                                                                                 j)
                                                                                            :*: S1
                                                                                                               NoSelector
                                                                                                               (Rec0
                                                                                                                  k)))
                                                                         :*: ((S1
                                                                                              NoSelector
                                                                                              (Rec0
                                                                                                 l)
                                                                                            :*: S1
                                                                                                               NoSelector
                                                                                                               (Rec0
                                                                                                                  m))
                                                                                           :*: (S1
                                                                                                               NoSelector
                                                                                                               (Rec0
                                                                                                                  n)
                                                                                                             :*: S1
                                                                                                                                NoSelector
                                                                                                                                (Rec0
                                                                                                                                   o))))))
type Rep1Tuple15 a b c d e f g h i j k l m n = D1
                                                 D1Tuple15
                                                 (C1
                                                    C1_0Tuple15
                                                    (((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))))
                                                     :*: (((S1
                                                                           NoSelector
                                                                           (Rec0
                                                                              h)
                                                                         :*: S1
                                                                                            NoSelector
                                                                                            (Rec0
                                                                                               i))
                                                                        :*: (S1
                                                                                            NoSelector
                                                                                            (Rec0
                                                                                               j)
                                                                                          :*: S1
                                                                                                             NoSelector
                                                                                                             (Rec0
                                                                                                                k)))
                                                                       :*: ((S1
                                                                                            NoSelector
                                                                                            (Rec0
                                                                                               l)
                                                                                          :*: S1
                                                                                                             NoSelector
                                                                                                             (Rec0
                                                                                                                m))
                                                                                         :*: (S1
                                                                                                             NoSelector
                                                                                                             (Rec0
                                                                                                                n)
                                                                                                           :*: S1
                                                                                                                              NoSelector
                                                                                                                              Par1)))))

instance Generic
             (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) where
    type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = Rep0Tuple15 a b c d e f g h i j k l m n o

    from x
      = M1
          (case x of {
             (,,,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13 g14 g15
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))
                             ((:*:)
                                (M1 (K1 g6))
                                (M1 (K1 g7)))))
                       ((:*:)
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (K1 g9)))
                             ((:*:)
                                (M1 (K1 g10))
                                (M1 (K1 g11))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g12))
                                (M1 (K1 g13)))
                             ((:*:)
                                (M1 (K1 g14))
                                (M1 (K1 g15)))))) })
    to (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 (K1 g1))
                                                                                       ((:*:) (M1 (K1 g2))
                                                                                                           (M1 (K1 g3))))
                                                                   ((:*:) ((:*:) (M1 (K1 g4))
                                                                                                           (M1 (K1 g5)))
                                                                                       ((:*:) (M1 (K1 g6))
                                                                                                           (M1 (K1 g7)))))
                                               ((:*:) ((:*:) ((:*:) (M1 (K1 g8))
                                                                                                           (M1 (K1 g9)))
                                                                                       ((:*:) (M1 (K1 g10))
                                                                                                           (M1 (K1 g11))))
                                                                   ((:*:) ((:*:) (M1 (K1 g12))
                                                                                                           (M1 (K1 g13)))
                                                                                       ((:*:) (M1 (K1 g14))
                                                                                                           (M1 (K1 g15)))))))
            -> (,,,,,,,,,,,,,,)
                 g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13 g14 g15 }

instance Generic1
             ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n) where
    type Rep1 ((,,,,,,,,,,,,,,) a b c d e f g h i j k l m n) = Rep1Tuple15 a b c d e f g h i j k l m n

    from1 x
      = M1
          (case x of {
             (,,,,,,,,,,,,,,) g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11 g12 g13 g14 g15
               -> M1
                    ((:*:)
                       ((:*:)
                          ((:*:)
                             (M1 (K1 g1))
                             ((:*:)
                                (M1 (K1 g2))
                                (M1 (K1 g3))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g4))
                                (M1 (K1 g5)))
                             ((:*:)
                                (M1 (K1 g6))
                                (M1 (K1 g7)))))
                       ((:*:)
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g8))
                                (M1 (K1 g9)))
                             ((:*:)
                                (M1 (K1 g10))
                                (M1 (K1 g11))))
                          ((:*:)
                             ((:*:)
                                (M1 (K1 g12))
                                (M1 (K1 g13)))
                             ((:*:)
                                (M1 (K1 g14))
                                (M1 (Par1 g15)))))) })
    to1 (M1 x)
      = case x of {
          (M1 ((:*:) ((:*:) ((:*:) (M1 g1)
                                                                                       ((:*:) (M1 g2)
                                                                                                           (M1 g3)))
                                                                   ((:*:) ((:*:) (M1 g4)
                                                                                                           (M1 g5))
                                                                                       ((:*:) (M1 g6)
                                                                                                           (M1 g7))))
                                               ((:*:) ((:*:) ((:*:) (M1 g8)
                                                                                                           (M1 g9))
                                                                                       ((:*:) (M1 g10)
                                                                                                           (M1 g11)))
                                                                   ((:*:) ((:*:) (M1 g12)
                                                                                                           (M1 g13))
                                                                                       ((:*:) (M1 g14)
                                                                                                           (M1 g15))))))
            -> (,,,,,,,,,,,,,,)
                 (unK1 g1) (unK1 g2)
                 (unK1 g3) (unK1 g4)
                 (unK1 g5) (unK1 g6)
                 (unK1 g7) (unK1 g8)
                 (unK1 g9) (unK1 g10)
                 (unK1 g11) (unK1 g12)
                 (unK1 g13) (unK1 g14)
                 (unPar1 g15) }

data D1Tuple15
data C1_0Tuple15

instance Datatype D1Tuple15 where
    datatypeName _ = "(,,,,,,,,,,,,,,)"
    moduleName _ = "GHC.Tuple"

instance Constructor C1_0Tuple15 where
    conName _ = "(,,,,,,,,,,,,,,)"

# endif
#endif

#if !(MIN_VERSION_base(4,14,0))
# if MIN_VERSION_base(4,6,0)
type Rep0Kleisli m a b = Rep  (Kleisli m a b)
type Rep1Kleisli m a   = Rep1 (Kleisli m a)
deriving instance Generic  (Kleisli m a b)
deriving instance Generic1 (Kleisli m a)
# else
type Rep0Kleisli m a b = D1 D1Kleisli (C1 C1_0Kleisli (S1 S1_0_0Kleisli (Rec0 (a -> m b))))
type Rep1Kleisli m a   = D1 D1Kleisli (C1 C1_0Kleisli (S1 S1_0_0Kleisli ((->) a :.: Rec1 m)))

instance Generic (Kleisli m a b) where
    type Rep (Kleisli m a b) = Rep0Kleisli m a b
    from x = M1 (case x of
        Kleisli g -> M1 (M1 (K1 g)))
    to (M1 x) = case x of
        M1 (M1 (K1 g)) -> Kleisli g

instance Generic1 (Kleisli m a) where
    type Rep1 (Kleisli m a) = Rep1Kleisli m a
    from1 x = M1 (case x of
        Kleisli g -> M1 (M1 (Comp1 (fmap Rec1 g))))
    to1 (M1 x) = case x of
        M1 (M1 g) -> Kleisli (fmap unRec1 (unComp1 g))

data D1Kleisli
data C1_0Kleisli
data S1_0_0Kleisli

instance Datatype D1Kleisli where
  datatypeName _ = "Kleisli"
  moduleName   _ = "Control.Arrow"

instance Constructor C1_0Kleisli where
  conName     _ = "Kleisli"
  conIsRecord _ = True

instance Selector S1_0_0Kleisli where
  selName _ = "runKleisli"
# endif
#endif

#if !(MIN_VERSION_base(4,12,0))
# if MIN_VERSION_base(4,6,0)
type Rep0Down a = Rep (Down a)
type Rep1Down   = Rep1 Down
deriving instance Generic (Down a)
deriving instance Generic1 Down
# else
type Rep0Down a = D1 D1Down (C1 C1_0Down (S1 NoSelector (Rec0 a)))
type Rep1Down   = D1 D1Down (C1 C1_0Down (S1 NoSelector Par1))

instance Generic (Down a) where
    type Rep (Down a) = Rep0Down a
    from x = M1 (case x of
        Down g -> M1 (M1 (K1 g)))
    to (M1 x) = case x of
        M1 (M1 (K1 g)) -> Down g

instance Generic1 Down where
    type Rep1 Down = Rep1Down
    from1 x = M1 (case x of
        Down g -> M1 (M1 (Par1 g)))
    to1 (M1 x) = case x of
        M1 (M1 g) -> Down (unPar1 g)

data D1Down
data C1_0Down

instance Datatype D1Down where
    datatypeName _ = "Down"
    moduleName   _ = "GHC.Exts"

instance Constructor C1_0Down where
    conName _ = "Down"
# endif
#endif

-----

#if !(MIN_VERSION_base(4,9,0))
type Rep0ExitCode = D1 D1ExitCode (C1 C1_0ExitCode U1
                               :+: C1 C1_1ExitCode (S1 NoSelector (Rec0 Int)))

instance Generic ExitCode where
    type Rep ExitCode = Rep0ExitCode
    from x = M1 (case x of
        ExitSuccess   -> L1 (M1 U1)
        ExitFailure g -> R1 (M1 (M1 (K1 g))))
    to (M1 x) = case x of
        L1 (M1 U1)          -> ExitSuccess
        R1 (M1 (M1 (K1 g))) -> ExitFailure g

data D1ExitCode
data C1_0ExitCode
data C1_1ExitCode

instance Datatype D1ExitCode where
    datatypeName _ = "ExitCode"
    moduleName   _ = "GHC.IO.Exception"

instance Constructor C1_0ExitCode where
    conName _ = "ExitSuccess"

instance Constructor C1_1ExitCode where
    conName _ = "ExitFailure"

-----

type Rep0Version = D1 D1Version (C1 C1_0Version (S1 S1_0_0Version (Rec0 [Int])
                                             :*: S1 S1_0_1Version (Rec0 [String])))

instance Generic Version where
    type Rep Version = Rep0Version
    from (Version b t) = M1 (M1 (M1 (K1 b) :*: M1 (K1 t)))
    to (M1 (M1 (M1 (K1 b) :*: M1 (K1 t)))) = Version b t

data D1Version
data C1_0Version
data S1_0_0Version
data S1_0_1Version

instance Datatype D1Version where
    datatypeName _ = "Version"
    moduleName   _ = "Data.Version"

instance Constructor C1_0Version where
    conName     _ = "Version"
    conIsRecord _ = True

instance Selector S1_0_0Version where
    selName _ = "versionBranch"

instance Selector S1_0_1Version where
    selName _ = "versionTags"

-----

type Rep1ConSum f g = D1 D1ConSum (C1 C1_0ConSum (S1 NoSelector (Rec1 f))
                               :+: C1 C1_1ConSum (S1 NoSelector (Rec1 g)))

instance Generic1 (f :+: g) where
    type Rep1 (f :+: g) = Rep1ConSum f g
    from1 x = M1 (case x of
        L1 l -> L1 (M1 (M1 (Rec1 l)))
        R1 r -> R1 (M1 (M1 (Rec1 r))))
    to1 (M1 x) = case x of
        L1 (M1 (M1 l)) -> L1 (unRec1 l)
        R1 (M1 (M1 r)) -> R1 (unRec1 r)

data D1ConSum
data C1_0ConSum
data C1_1ConSum

instance Datatype D1ConSum where
    datatypeName _ = ":+:"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_0ConSum where
    conName _ = "L1"

instance Constructor C1_1ConSum where
    conName _ = "R1"

-----

type Rep1ConProduct f g = D1 D1ConProduct (C1 C1_ConProduct (S1 NoSelector (Rec1 f)
                                                         :*: S1 NoSelector (Rec1 g)))

instance Generic1 (f :*: g) where
    type Rep1 (f :*: g) = Rep1ConProduct f g
    from1 (f :*: g) = M1 (M1 (M1 (Rec1 f) :*: M1 (Rec1 g)))
    to1 (M1 (M1 (M1 f :*: M1 g))) = unRec1 f :*: unRec1 g

data D1ConProduct
data C1_ConProduct

instance Datatype D1ConProduct where
    datatypeName _ = ":*:"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_ConProduct where
    conName   _ = ":*:"
    conFixity _ = Infix RightAssociative 6

-----

type Rep1ConCompose f g =
    D1 D1ConCompose (C1 C1_0ConCompose (S1 S1_0_0ConCompose (f :.: Rec1 g)))

instance Functor f => Generic1 (f :.: g) where
    type Rep1 (f :.: g) = Rep1ConCompose f g
    from1 (Comp1 c) = M1 (M1 (M1 (Comp1 (fmap Rec1 c))))
    to1 (M1 (M1 (M1 c))) = Comp1 (fmap unRec1 (unComp1 c))

data D1ConCompose
data C1_0ConCompose
data S1_0_0ConCompose

instance Datatype D1ConCompose where
    datatypeName _ = ":.:"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_0ConCompose where
  conName     _ = "Comp1"
  conIsRecord _ = True

instance Selector S1_0_0ConCompose where
  selName _ = "unComp1"

-----

type Rep1K1 i c = D1 D1K1 (C1 C1_0K1 (S1 S1_0_0K1 (Rec0 c)))

instance Generic1 (K1 i c) where
    type Rep1 (K1 i c) = Rep1K1 i c
    from1 (K1 c) = M1 (M1 (M1 (K1 c)))
    to1 (M1 (M1 (M1 c))) = K1 (unK1 c)

data D1K1
data C1_0K1
data S1_0_0K1

instance Datatype D1K1 where
    datatypeName _ = "K1"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_0K1 where
    conName     _ = "K1"
    conIsRecord _ = True

instance Selector S1_0_0K1 where
    selName _ = "unK1"

-----

type Rep1M1 i c f = D1 D1M1 (C1 C1_0M1 (S1 S1_0_0M1 (Rec1 f)))

instance Generic1 (M1 i c f) where
    type Rep1 (M1 i c f) = Rep1M1 i c f
    from1 (M1 m) = M1 (M1 (M1 (Rec1 m)))
    to1 (M1 (M1 (M1 m))) = M1 (unRec1 m)

data D1M1
data C1_0M1
data S1_0_0M1

instance Datatype D1M1 where
    datatypeName _ = "M1"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_0M1 where
    conName     _ = "M1"
    conIsRecord _ = True

instance Selector S1_0_0M1 where
    selName _ = "unM1"

-----

type Rep1Par1 = D1 D1Par1 (C1 C1_0Par1 (S1 S1_0_0Par1 Par1))

instance Generic1 Par1 where
    type Rep1 Par1 = Rep1Par1
    from1 (Par1 p) = M1 (M1 (M1 (Par1 p)))
    to1 (M1 (M1 (M1 p))) = Par1 (unPar1 p)

data D1Par1
data C1_0Par1
data S1_0_0Par1

instance Datatype D1Par1 where
    datatypeName _ = "Par1"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_0Par1 where
    conName     _ = "Par1"
    conIsRecord _ = True

instance Selector S1_0_0Par1 where
    selName _ = "unPar1"

-----

type Rep1Rec1 f = D1 D1Rec1 (C1 C1_0Rec1 (S1 S1_0_0Rec1 (Rec1 f)))

instance Generic1 (Rec1 f) where
    type Rep1 (Rec1 f) = Rep1Rec1 f
    from1 (Rec1 r) = M1 (M1 (M1 (Rec1 r)))
    to1 (M1 (M1 (M1 r))) = Rec1 (unRec1 r)

data D1Rec1
data C1_0Rec1
data S1_0_0Rec1

instance Datatype D1Rec1 where
    datatypeName _ = "Rec1"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_0Rec1 where
    conName     _ = "Rec1"
    conIsRecord _ = True

instance Selector S1_0_0Rec1 where
    selName _ = "unRec1"

-----

type Rep1U1 = D1 D1U1 (C1 C1_0U1 U1)

instance Generic1 U1 where
    type Rep1 U1 = Rep1U1
    from1 U1 = M1 (M1 U1)
    to1 (M1 (M1 U1)) = U1

data D1U1
data C1_0U1

instance Datatype D1U1 where
    datatypeName _ = "U1"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

instance Constructor C1_0U1 where
    conName _ = "U1"

-----

type Rep0V1 p = D1 D1V1 V1
type Rep1V1   = D1 D1V1 V1

instance Generic (V1 p) where
    type Rep (V1 p) = Rep0V1 p
    from x = M1 (case x of !_ -> error "No generic representation for empty datatype V1")
    to (M1 !_) = error "No values for empty datatype V1"

instance Generic1 V1 where
    type Rep1 V1 = Rep1V1
    from1 x = M1 (case x of !_ -> error "No generic representation for empty datatype V1")
    to1 (M1 !_) = error "No values for empty datatype V1"

data D1V1

instance Datatype D1V1 where
    datatypeName _ = "V1"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

-----

type Rep0UAddr p = D1 D1UAddr (C1 C1_0UAddr (S1 S1_0_0UAddr UAddr))
type Rep1UAddr   = D1 D1UAddr (C1 C1_0UAddr (S1 S1_0_0UAddr UAddr))

instance Generic (UAddr p) where
    type Rep (UAddr p) = Rep0UAddr p
    from (UAddr a) = M1 (M1 (M1 (UAddr a)))
    to (M1 (M1 (M1 (UAddr a)))) = UAddr a

instance Generic1 UAddr where
    type Rep1 UAddr = Rep1UAddr
    from1 (UAddr a) = M1 (M1 (M1 (UAddr a)))
    to1 (M1 (M1 (M1 (UAddr a)))) = UAddr a

data D1UAddr
data C1_0UAddr
data S1_0_0UAddr

instance Datatype D1UAddr where
    datatypeName _ = "UAddr"
    moduleName   _ = "Generics.Deriving.Base.Internal"

instance Constructor C1_0UAddr where
    conName     _ = "UAddr"
    conIsRecord _ = True

instance Selector S1_0_0UAddr where
    selName _ = "uAddr#"

-----

type Rep0UChar p = D1 D1UChar (C1 C1_0UChar (S1 S1_0_0UChar UChar))
type Rep1UChar   = D1 D1UChar (C1 C1_0UChar (S1 S1_0_0UChar UChar))

instance Generic (UChar p) where
    type Rep (UChar p) = Rep0UChar p
    from (UChar c) = M1 (M1 (M1 (UChar c)))
    to (M1 (M1 (M1 (UChar c)))) = UChar c

instance Generic1 UChar where
    type Rep1 UChar = Rep1UChar
    from1 (UChar c) = M1 (M1 (M1 (UChar c)))
    to1 (M1 (M1 (M1 (UChar c)))) = UChar c

data D1UChar
data C1_0UChar
data S1_0_0UChar

instance Datatype D1UChar where
    datatypeName _ = "UChar"
    moduleName   _ = "Generics.Deriving.Base.Internal"

instance Constructor C1_0UChar where
    conName     _ = "UChar"
    conIsRecord _ = True

instance Selector S1_0_0UChar where
    selName _ = "uChar#"

-----

type Rep0UDouble p = D1 D1UDouble (C1 C1_0UDouble (S1 S1_0_0UDouble UDouble))
type Rep1UDouble   = D1 D1UDouble (C1 C1_0UDouble (S1 S1_0_0UDouble UDouble))

instance Generic (UDouble p) where
    type Rep (UDouble p) = Rep0UDouble p
    from (UDouble d) = M1 (M1 (M1 (UDouble d)))
    to (M1 (M1 (M1 (UDouble d)))) = UDouble d

instance Generic1 UDouble where
    type Rep1 UDouble = Rep1UDouble
    from1 (UDouble d) = M1 (M1 (M1 (UDouble d)))
    to1 (M1 (M1 (M1 (UDouble d)))) = UDouble d

data D1UDouble
data C1_0UDouble
data S1_0_0UDouble

instance Datatype D1UDouble where
    datatypeName _ = "UDouble"
    moduleName   _ = "Generics.Deriving.Base.Internal"

instance Constructor C1_0UDouble where
    conName     _ = "UDouble"
    conIsRecord _ = True

instance Selector S1_0_0UDouble where
    selName _ = "uDouble#"

-----

type Rep0UFloat p = D1 D1UFloat (C1 C1_0UFloat (S1 S1_0_0UFloat UFloat))
type Rep1UFloat   = D1 D1UFloat (C1 C1_0UFloat (S1 S1_0_0UFloat UFloat))

instance Generic (UFloat p) where
    type Rep (UFloat p) = Rep0UFloat p
    from (UFloat f) = M1 (M1 (M1 (UFloat f)))
    to (M1 (M1 (M1 (UFloat f)))) = UFloat f

instance Generic1 UFloat where
    type Rep1 UFloat = Rep1UFloat
    from1 (UFloat f) = M1 (M1 (M1 (UFloat f)))
    to1 (M1 (M1 (M1 (UFloat f)))) = UFloat f

data D1UFloat
data C1_0UFloat
data S1_0_0UFloat

instance Datatype D1UFloat where
    datatypeName _ = "UFloat"
    moduleName   _ = "Generics.Deriving.Base.Internal"

instance Constructor C1_0UFloat where
    conName     _ = "UFloat"
    conIsRecord _ = True

instance Selector S1_0_0UFloat where
    selName _ = "uFloat#"

-----

type Rep0UInt p = D1 D1UInt (C1 C1_0UInt (S1 S1_0_0UInt UInt))
type Rep1UInt   = D1 D1UInt (C1 C1_0UInt (S1 S1_0_0UInt UInt))

instance Generic (UInt p) where
    type Rep (UInt p) = Rep0UInt p
    from (UInt i) = M1 (M1 (M1 (UInt i)))
    to (M1 (M1 (M1 (UInt i)))) = UInt i

instance Generic1 UInt where
    type Rep1 UInt = Rep1UInt
    from1 (UInt i) = M1 (M1 (M1 (UInt i)))
    to1 (M1 (M1 (M1 (UInt i)))) = UInt i

data D1UInt
data C1_0UInt
data S1_0_0UInt

instance Datatype D1UInt where
    datatypeName _ = "UInt"
    moduleName   _ = "Generics.Deriving.Base.Internal"

instance Constructor C1_0UInt where
    conName     _ = "UInt"
    conIsRecord _ = True

instance Selector S1_0_0UInt where
    selName _ = "uInt#"

-----

type Rep0UWord p = D1 D1UWord (C1 C1_0UWord (S1 S1_0_0UWord UWord))
type Rep1UWord   = D1 D1UWord (C1 C1_0UWord (S1 S1_0_0UWord UWord))

instance Generic (UWord p) where
    type Rep (UWord p) = Rep0UWord p
    from (UWord w) = M1 (M1 (M1 (UWord w)))
    to (M1 (M1 (M1 (UWord w)))) = UWord w

instance Generic1 UWord where
    type Rep1 UWord = Rep1UWord
    from1 (UWord w) = M1 (M1 (M1 (UWord w)))
    to1 (M1 (M1 (M1 (UWord w)))) = UWord w

data D1UWord
data C1_0UWord
data S1_0_0UWord

instance Datatype D1UWord where
    datatypeName _ = "UWord"
    moduleName   _ = "Generics.Deriving.Base.Internal"

instance Constructor C1_0UWord where
    conName     _ = "UWord"
    conIsRecord _ = True

instance Selector S1_0_0UWord where
    selName _ = "uWord#"

-----

# if MIN_VERSION_base(4,4,0)
type Rep0Complex a = D1 D1Complex (C1 C1_0Complex (S1 NoSelector (Rec0 a)
                                               :*: S1 NoSelector (Rec0 a)))
type Rep1Complex = D1 D1Complex (C1 C1_0Complex (S1 NoSelector Par1
                                             :*: S1 NoSelector Par1))

instance Generic (Complex a) where
    type Rep (Complex a) = Rep0Complex a
    from (a :+ b) = M1 (M1 (M1 (K1 a) :*: M1 (K1 b)))
    to (M1 (M1 (M1 (K1 a) :*: M1 (K1 b)))) = a :+ b

instance Generic1 Complex where
    type Rep1 Complex = Rep1Complex
    from1 (a :+ b) = M1 (M1 (M1 (Par1 a) :*: M1 (Par1 b)))
    to1 (M1 (M1 (M1 a :*: M1 b))) = unPar1 a :+ unPar1 b

data D1Complex
data C1_0Complex

instance Datatype D1Complex where
    datatypeName _ = "Complex"
    moduleName   _ = "Data.Complex"

instance Constructor C1_0Complex where
    conName   _ = ":+"
    conFixity _ = Infix LeftAssociative 9
# endif

-----

# if MIN_VERSION_base(4,7,0)
type Rep1Proxy = D1 D1Proxy (C1 C1_0Proxy U1)

instance Generic1 Proxy where
    type Rep1 Proxy = Rep1Proxy
    from1 Proxy      = M1 (M1 U1)
    to1 (M1 (M1 U1)) = Proxy

data D1Proxy
data C1_0Proxy

instance Datatype D1Proxy where
    datatypeName _ = "Proxy"
    moduleName   _ = "Data.Proxy"

instance Constructor C1_0Proxy where
    conName _ = "Proxy"
# endif
#endif

-----

#if !(MIN_VERSION_base(4,7,0))
--------------------------------------------------------------------------------
-- 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 x = M1 (case x of
        NoArity -> L1 (M1 U1)
        Arity a -> R1 (M1 (M1 (K1 a))))

    to (M1 x) = case x of
        L1 (M1 U1)          -> NoArity
        R1 (M1 (M1 (K1 a))) -> Arity a

data D1Arity
data C1_0Arity
data C1_1Arity

instance Datatype D1Arity where
    datatypeName _ = "Arity"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

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 x = M1 (case x of
        LeftAssociative  -> L1 (M1 U1)
        RightAssociative -> R1 (L1 (M1 U1))
        NotAssociative   -> R1 (R1 (M1 U1)))

    to (M1 x) = case x of
        L1 (M1 U1)      -> LeftAssociative
        R1 (L1 (M1 U1)) -> RightAssociative
        R1 (R1 (M1 U1)) -> NotAssociative

data D1Associativity
data C1_0Associativity
data C1_1Associativity
data C1_2Associativity

instance Datatype D1Associativity where
    datatypeName _ = "Associativity"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

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 x = M1 (case x of
        Prefix    -> L1 (M1 U1)
        Infix a i -> R1 (M1 (M1 (K1 a) :*: M1 (K1 i))))

    to (M1 x) = case x of
        L1 (M1 U1)                        -> Prefix
        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"
# if !(MIN_VERSION_base(4,4,0))
    moduleName   _ = "Generics.Deriving.Base.Internal"
# else
    moduleName   _ = "GHC.Generics"
# endif

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

-----

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

-----

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

-----

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

-----

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

-----

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 x = M1 (case x of
        L1 l -> L1 (M1 (M1 (K1 l)))
        R1 r -> R1 (M1 (M1 (K1 r))))

    to (M1 x) = case x of
        L1 (M1 (M1 (K1 l))) -> L1 l
        R1 (M1 (M1 (K1 r))) -> R1 r

-----

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

-----

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

-----

#if !(MIN_VERSION_base(4,6,0))
type Rep1List = D1 D1List (C1 C1_0List U1 :+:
                           C1 C1_1List (S1 NoSelector Par1
                                    :*: S1 NoSelector (Rec1 [])))

instance Generic1 [] where
    type Rep1 [] = Rep1List

    from1 x = M1 (case x of
        []  -> L1 (M1 U1)
        h:t -> R1 (M1 (M1 (Par1 h) :*: M1 (Rec1 t))))

    to1 (M1 x) = case x of
        L1 (M1 U1)                            -> []
        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 x = M1 (case x of
        Left  l -> L1 (M1 (M1 (K1 l)))
        Right r -> R1 (M1 (M1 (Par1 r))))

    to1 (M1 x) = case x of
        L1 (M1 (M1 (K1 l)))   -> Left l
        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 x = M1 (case x of
        Nothing -> L1 (M1 U1)
        Just j  -> R1 (M1 (M1 (Par1 j))))

    to1 (M1 x) = case x of
        L1 (M1 U1)            -> Nothing
        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 !(MIN_VERSION_base(4,4,0))
type Rep0Bool = D1 D1Bool (C1 C1_0Bool U1 :+: C1 C1_1Bool U1)

instance Generic Bool where
    type Rep Bool = Rep0Bool

    from x = M1 (case x of
        False -> L1 (M1 U1)
        True  -> R1 (M1 U1))

    to (M1 x) = case x of
        L1 (M1 U1) -> False
        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 x = M1 (case x of
        Left  l -> L1 (M1 (M1 (K1 l)))
        Right r -> R1 (M1 (M1 (K1 r))))

    to (M1 x) = case x of
        L1 (M1 (M1 (K1 l))) -> Left l
        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 x = M1 (case x of
        []  -> L1 (M1 U1)
        h:t -> R1 (M1 (M1 (K1 h) :*: M1 (K1 t))))

    to (M1 x) = case x of
        L1 (M1 U1)                        -> []
        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 x = M1 (case x of
        Nothing -> L1 (M1 U1)
        Just j  -> R1 (M1 (M1 (K1 j))))

    to (M1 x) = case x of
        L1 (M1 U1)          -> Nothing
        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 x = M1 (case x of
        LT -> L1 (M1 U1)
        EQ -> R1 (L1 (M1 U1))
        GT -> R1 (R1 (M1 U1)))

    to (M1 x) = case x of
        L1 (M1 U1)      -> LT
        R1 (L1 (M1 U1)) -> EQ
        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