-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | functions on n-ary tuples using generics-sop
--   
--   Exports various functions on n-ary tuples. This library uses
--   generics-sop to create a generic representation of n-ary product
--   types. To regain type inference, the exported functions work only on
--   tuples with at most 10 components.
@package tuple-sop
@version 0.3.1.0


-- | This module exports various functions that work with n-ary tuples.
--   
--   Generally speaking all functions can be applied to tuples of different
--   sizes.
--   
--   However, to improve type inference we have limited our implementation
--   to only only work on tuples of at most size 10.
--   
--   For functions working with indexes we have also added some convenience
--   functions to avoid usage of Proxy's.
module Data.Tuple.Ops

-- | Takes an n-ary tuple and returns the first element of the requested
--   type
--   
--   <pre>
--   &gt;&gt;&gt; sel (1,'d','c') :: Char
--   'd'
--   </pre>
sel :: Select s t => s -> t

-- | Takes an n-ary tuple and a <a>Proxy</a> carrying a <a>Nat</a>, returns
--   the element with the index specified by the <tt>Nat</tt>
--   
--   <pre>
--   &gt;&gt;&gt; selN (1,'d',False,'c') (Proxy :: Proxy 2)
--   False
--   </pre>
selN :: SelectN s n t => s -> Proxy n -> t

-- | Selects the first element in an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; sel1 (0,'d','c')
--   0
--   </pre>
sel1 :: SelectN s 0 t => s -> t
sel2 :: SelectN s 1 t => s -> t
sel3 :: SelectN s 2 t => s -> t
sel4 :: SelectN s 3 t => s -> t
sel5 :: SelectN s 4 t => s -> t
sel6 :: SelectN s 5 t => s -> t
sel7 :: SelectN s 6 t => s -> t
sel8 :: SelectN s 7 t => s -> t
sel9 :: SelectN s 8 t => s -> t
sel10 :: SelectN s 9 t => s -> t

-- | Selects the last element of any n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; lastT (1,2,3,4)
--   4
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; lastT (1,2,3)
--   3
--   </pre>
lastT :: forall s n t. (LengthT s ~ n, SelectN s (n - 1) t) => s -> t

-- | Applies a monomorphic function to the first element of an n-ary tuple
--   that matches the type of the argument of the function.
--   
--   <pre>
--   &gt;&gt;&gt; app not ('d',True)
--   ('d',False)
--   </pre>
--   
--   Sometimes it is necessary to specify the result type, such that the
--   function becomes monomorphic &gt;&gt;&gt; app (+1) (True,5) ::
--   (Bool,Integer) (True,6)
--   
--   One may also use <a>appPoly</a>, which doesn't require specifying the
--   result type. However it can only apply functions to the first element
--   of an n-ary tuple.
app :: App f s t => f -> s -> t

-- | Applies a polymorphic function to the first element of an n-ary tuple.
--   Since the function is polymorphic in its argument it can always be
--   applied to the first element of a tuple.
--   
--   <pre>
--   &gt;&gt;&gt; appPoly show (5,False)
--   ("5",False)
--   </pre>
appPoly :: App (Poly a b) s t => (a -> b) -> s -> t

-- | Applies a function to the element at index <tt>n</tt> in an n-ary
--   tuple.
--   
--   <pre>
--   &gt;&gt;&gt; appN not (Proxy 2) (False,True,False)
--   (False,True,True)
--   </pre>
--   
--   <a>appN</a> also works for polymorphic functions
--   
--   <pre>
--   &gt;&gt;&gt; appN show (5,'c',False) (Proxy :: Proxy 2)
--   (5,'c',"False")
--   </pre>
appN :: AppN f s n t => f -> s -> Proxy n -> t

-- | Apply an n-ary function to an n-ary tuple. The function takes an
--   argument for each component of the tuple in left-to-right order.
--   
--   <pre>
--   &gt;&gt;&gt; appF (\a b c -&gt; if a then b else c) (False,1,2)
--   2
--   </pre>
appF :: AppF f s t => f -> s -> t

-- | Maps a monomorphic function over each element in an n-ary tuple that
--   matches the type of the argument of the function
--   
--   <pre>
--   &gt;&gt;&gt; mapT not (True,'c',False)
--   (False,'c',True)
--   </pre>
--   
--   Sometimes it is necessary to specify the result type.
--   
--   <pre>
--   &gt;&gt;&gt; mapT (+1) (5,6,7,False) :: (Integer,Integer,Integer,Bool)
--   (6,7,8,False)
--   </pre>
--   
--   Using <a>mapPolyT</a> this is not necessary. However, to use
--   <a>mapPolyT</a> the tuple may only contains elements of a single type.
mapT :: MapT f s t => f -> s -> t

-- | Applies a polymorphic function to each element in an n-ary tuple.
--   Requires all elements in the tuple to be of the same type.
--   
--   <pre>
--   &gt;&gt;&gt; mapPolyT (+1) (5,6,7,8)
--   (6,7,8,9)
--   </pre>
--   
--   <pre>
--   &gt;&gt;&gt; mapPolyT (+1) (5,6,7,False)
--   No instance for (Num Bool) arising from the literal `5'
--   </pre>
mapPolyT :: MapT (Poly a b) s t => (a -> b) -> s -> t

-- | Applies a function to the first element of an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; app1 (+1) (5,6,7)
--   (6,6,7)
--   </pre>
app1 :: AppN f s 0 t => f -> s -> t
app2 :: AppN f s 1 t => f -> s -> t
app3 :: AppN f s 2 t => f -> s -> t
app4 :: AppN f s 3 t => f -> s -> t
app5 :: AppN f s 4 t => f -> s -> t
app6 :: AppN f s 5 t => f -> s -> t
app7 :: AppN f s 6 t => f -> s -> t
app8 :: AppN f s 7 t => f -> s -> t
app9 :: AppN f s 8 t => f -> s -> t
app10 :: AppN f s 9 t => f -> s -> t

-- | Adds an element to the head of an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; consT 5 (True,'c')
--   (5,True,'c')
--   </pre>
consT :: ConsT a s t => a -> s -> t

-- | Adds an element to the back of an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; snocT 5 (True,'c')
--   (True,'c',5)
--   </pre>
snocT :: SnocT a s t => a -> s -> t

-- | Appends two n-ary tuple into one larger tuple
--   
--   <pre>
--   &gt;&gt;&gt; appendT (5,'c') ('d',False)
--   (5,'c','d',False)
--   </pre>
appendT :: AppendT s r t => s -> r -> t

-- | Reverses the order of elements in an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; reverseT (1,2,3,4)
--   (4,3,2,1)
--   </pre>
reverseT :: ReverseT s t => s -> t

-- | Takes an n-ary tuple and returns the same tuple minus the first
--   element.
--   
--   <pre>
--   &gt;&gt;&gt; initT (1,2,3,4)
--   (1,2,3)
--   </pre>
--   
--   Works only only tuples of size at least 3
--   
--   <pre>
--   &gt;&gt;&gt; initT (1,2)
--   Couldn't match type `2 ':&lt;= 3' with `2 ':&gt;= 3'
--   </pre>
initT :: InitT s t => s -> t

-- | Takes an n-ary tuple and returns the same tuple minus the first
--   element.
--   
--   <pre>
--   &gt;&gt;&gt; tailT (1,2,3,4)
--   (2,3,4)
--   </pre>
--   
--   Works only only tuples of size at least 3
--   
--   <pre>
--   &gt;&gt;&gt; tailT (1,2)
--   Couldn't match type `2 ':&lt;= 3' with `2 ':&gt;= 3'
--   </pre>
tailT :: TailT s t => s -> t

-- | Inserts an element into an n-ary tuple. Its position is determined by
--   the target type
--   
--   <pre>
--   &gt;&gt;&gt; ins 5 ('c', False) :: (Char, Integer, Bool)
--   ('c',5,False)
--   </pre>
--   
--   An element will only be inserted at a specific position if:
--   
--   <ul>
--   <li>The element type matches the component type</li>
--   <li>The tail of the tuple remains well-typed</li>
--   </ul>
--   
--   <pre>
--   &gt;&gt;&gt; ins 5 ('c',1,False) :: (Char, Integer, Bool, Integer)
--   ('c',1,False,5)
--   </pre>
--   
--   In the above example, inserting 5 after <tt>c</tt> would make the tail
--   of the tuple have type (Integer, Bool) when the target type asks for
--   (Bool,Integer)
--   
--   When attempting to insert an element before or after a component of
--   the same type the element is always inserted in front
--   
--   <pre>
--   &gt;&gt;&gt; ins 5 ('c',1,False) :: (Char, Integer, Integer, Bool)
--   ('c',5,1,False)
--   </pre>
ins :: Insert a s t => a -> s -> t

-- | Inserts an element at an index specified position into an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; insN 5 ('c',1,False) (Proxy :: Proxy 1)
--   ('c',5,1,False)
--   </pre>
insN :: InsertN a s n t => a -> s -> Proxy n -> t

-- | Inserts an element in head position into an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; ins1 5 ('c',1,False)
--   (5,'c',1,False)
--   </pre>
ins1 :: InsertN a s 0 t => a -> s -> t
ins2 :: InsertN a s 1 t => a -> s -> t
ins3 :: InsertN a s 2 t => a -> s -> t
ins4 :: InsertN a s 3 t => a -> s -> t
ins5 :: InsertN a s 4 t => a -> s -> t
ins6 :: InsertN a s 5 t => a -> s -> t
ins7 :: InsertN a s 6 t => a -> s -> t
ins8 :: InsertN a s 7 t => a -> s -> t
ins9 :: InsertN a s 8 t => a -> s -> t
ins10 :: InsertN a s 9 t => a -> s -> t

-- | Deletes the first element in an n-ary tuple whose type does not exist
--   in the target type
--   
--   <pre>
--   &gt;&gt;&gt; del ('c',False,5) :: (Char,Bool)
--   ('c',False)
--   </pre>
del :: Delete s t => s -> t

-- | Deletes an element specified by an index in an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; delN ('c',False,5) (Proxy :: Proxy 1)
--   ('c',5)
--   </pre>
delN :: DeleteN s n t => s -> Proxy n -> t

-- | Deletes the first element of an n-ary tuple
--   
--   <pre>
--   &gt;&gt;&gt; del1 ('c',False,5)
--   (False,5)
--   </pre>
del1 :: DeleteN s 0 t => s -> t
del2 :: DeleteN s 1 t => s -> t
del3 :: DeleteN s 2 t => s -> t
del4 :: DeleteN s 3 t => s -> t
del5 :: DeleteN s 4 t => s -> t
del6 :: DeleteN s 5 t => s -> t
del7 :: DeleteN s 6 t => s -> t
del8 :: DeleteN s 7 t => s -> t
del9 :: DeleteN s 8 t => s -> t
del10 :: DeleteN s 9 t => s -> t

-- | Fold left for n-ary tuples
--   
--   <pre>
--   &gt;&gt;&gt; foldlT (-) 0 (4,3,2,1)
--   -10
--   </pre>
foldlT :: FoldLeft f s t => f -> t -> s -> t

-- | Fold right for n-ary tuples
--   
--   <pre>
--   &gt;&gt;&gt; foldrT (-) 0 (4,3,2,1)
--   2
--   </pre>
foldrT :: FoldRight f s t => f -> t -> s -> t

-- | Converts a curried function to a function that works on n-ary tuples
--   
--   <pre>
--   &gt;&gt;&gt; uncurryT (\a b c -&gt; a + b + c) (1,2,3)
--   6
--   </pre>
uncurryT :: UnCurryT s t b => s -> t -> b

-- | Converts a function that works on n-ary tuples to a curried function
--   
--   <pre>
--   &gt;&gt;&gt; curryT (\(a,b,c) -&gt; a + b + c) 1 2 3 :: Integer
--   6
--   </pre>
--   
--   Currently, type inference is partially broken for this function
curryT :: CurryT s t => s -> t
instance (Generics.SOP.Universe.Generic s, Generics.SOP.Universe.Rep s ~ Generics.SOP.NS.SOP Generics.SOP.BasicFunctors.I '[xs], Data.Tuple.Ops.RepNP s ~ rep, Data.Tuple.Ops.ToTuple rep ~ s) => Data.Tuple.Ops.GenericNP s rep
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.LEQ (Data.Tuple.Ops.LengthT s) 3, Data.Tuple.Ops.GTailT rep_s rep_t) => Data.Tuple.Ops.TailT s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.LEQ (Data.Tuple.Ops.LengthT s) 3, Data.Tuple.Ops.GInitT rep_s rep_t) => Data.Tuple.Ops.InitT s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.LEQ (Data.Tuple.Ops.LengthT s) 3, Data.Tuple.Ops.GDelete rep_s rep_t) => Data.Tuple.Ops.Delete s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.LEQ (Data.Tuple.Ops.LengthT s) 3, Data.Tuple.Ops.GDeleteN rep_s (Data.Tuple.Ops.Lit n) rep_t) => Data.Tuple.Ops.DeleteN s n t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GInsert (Data.Tuple.Ops.InsLoc a rep_s rep_t) a rep_s rep_t) => Data.Tuple.Ops.Insert a s t
instance (Data.Tuple.Ops.FuncToGen s (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs -> b), Data.Tuple.Ops.ToFun xs b ~ t, Data.Tuple.Ops.GCurryT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) xs t) => Data.Tuple.Ops.CurryT s t
instance (f ~ (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I ys -> c), Data.Tuple.Ops.Head (Data.Tuple.Ops.Diff ys (Data.Tuple.Ops.Reverse xs '[])) ~ a, Data.Tuple.Ops.ToFun (Data.Tuple.Ops.Tail (Data.Tuple.Ops.Diff ys (Data.Tuple.Ops.Reverse xs '[]))) c ~ b, Data.Tuple.Ops.GCurryT f (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) ps b) => Data.Tuple.Ops.GCurryT f (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (a : ps) (a -> b)
instance (b ~ b', ys ~ Data.Tuple.Ops.Reverse xs '[], Data.Tuple.Ops.GReverse (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I ys)) => Data.Tuple.Ops.GCurryT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I ys -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) '[] b'
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.Applicable f rep_s ~ app, Data.Tuple.Ops.GApp f app rep_s rep_t) => Data.Tuple.Ops.App f s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.Applicable f rep_s ~ app, Data.Tuple.Ops.GMapT f app rep_s rep_t) => Data.Tuple.Ops.MapT f s t
instance (a ~ a', b ~ b') => Data.Tuple.Ops.GApp (Data.Tuple.Ops.Poly a b) ('GHC.Types.True : app) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a' : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b' : xs))
instance (a ~ a', b ~ b', Data.Tuple.Ops.GMapT (Data.Tuple.Ops.Poly a b) apps (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs')) => Data.Tuple.Ops.GMapT (Data.Tuple.Ops.Poly a b) ('GHC.Types.True : apps) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a' : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b' : xs'))
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GFlattenT (Data.Tuple.Ops.AreProducts rep_s) rep_s rep_t) => Data.Tuple.Ops.FlattenT s t
instance (Data.Tuple.Ops.GenericNP x rep_x, Data.Tuple.Ops.GFlattenT (Data.Tuple.Ops.AreProducts rep_x) rep_x x', Data.Tuple.Ops.GFlattenT ps (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs'), Data.Tuple.Ops.GAppendT x' (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xss)) => Data.Tuple.Ops.GFlattenT ('GHC.Types.True : ps) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (x : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xss)
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GSelectN (Data.Tuple.Ops.RepNP s) (Data.Tuple.Ops.Lit n) t) => Data.Tuple.Ops.SelectN s n t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GAppN f rep_s (Data.Tuple.Ops.Lit n) rep_t) => Data.Tuple.Ops.AppN f s n t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GInsertN a rep_s (Data.Tuple.Ops.Lit n) rep_t) => Data.Tuple.Ops.InsertN a s n t
instance Data.Tuple.Ops.GSelectN (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (t : xs)) 'Data.Tuple.Ops.Z' t
instance Data.Tuple.Ops.GSelectN (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) n t => Data.Tuple.Ops.GSelectN (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) ('Data.Tuple.Ops.S' n) t
instance (a ~ a', b ~ b') => Data.Tuple.Ops.GAppN (a -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a' : xs)) 'Data.Tuple.Ops.Z' (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b' : xs))
instance Data.Tuple.Ops.GAppN f (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) n (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GAppN f (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (c : xs)) ('Data.Tuple.Ops.S' n) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (c : xs'))
instance Data.Tuple.Ops.GDeleteN (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (t : xs)) 'Data.Tuple.Ops.Z' (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs)
instance Data.Tuple.Ops.GDeleteN (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) n (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GDeleteN (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) ('Data.Tuple.Ops.S' n) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs'))
instance Data.Tuple.Ops.GInsert 'Data.Tuple.Ops.Z' a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs))
instance (b ~ c, Data.Tuple.Ops.GInsert n a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs')) => Data.Tuple.Ops.GInsert ('Data.Tuple.Ops.S' n) a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (c : xs'))
instance Data.Tuple.Ops.GInsertN a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) 'Data.Tuple.Ops.Z' (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs))
instance Data.Tuple.Ops.GInsertN a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) n (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GInsertN a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs)) ('Data.Tuple.Ops.S' n) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs'))
instance Data.Tuple.Ops.GReverse (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I ys) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I ys)
instance Data.Tuple.Ops.GReverse (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : ys)) t => Data.Tuple.Ops.GReverse (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I ys) t
instance (b ~ b') => Data.Tuple.Ops.FuncToGen b b'
instance (Data.Tuple.Ops.GenericNP a rep_a, rep_a ~ g, Data.Tuple.Ops.FuncToGen b b') => Data.Tuple.Ops.FuncToGen (a -> b) (g -> b')
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GSelect (Data.Tuple.Ops.RepNP s) t) => Data.Tuple.Ops.Select s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GAppF f rep_s t) => Data.Tuple.Ops.AppF f s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GConsT a rep_s rep_t) => Data.Tuple.Ops.ConsT a s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GSnocT a rep_s rep_t) => Data.Tuple.Ops.SnocT a s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GFoldLeft f rep_s t) => Data.Tuple.Ops.FoldLeft f s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GFoldRight f rep_s t) => Data.Tuple.Ops.FoldRight f s t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP r rep_r, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GAppendT rep_s rep_r rep_t) => Data.Tuple.Ops.AppendT s r t
instance (Data.Tuple.Ops.GenericNP s rep_s, Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GReverseT rep_s (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) rep_t) => Data.Tuple.Ops.ReverseT s t
instance (Data.Tuple.Ops.GenericNP t rep_t, Data.Tuple.Ops.GUnCurryT s rep_t b) => Data.Tuple.Ops.UnCurryT s t b
instance (b ~ b') => Data.Tuple.Ops.GUnCurryT b (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) b'
instance (a ~ a', Data.Tuple.Ops.GUnCurryT c (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) b') => Data.Tuple.Ops.GUnCurryT (a -> c) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a' : xs)) b'
instance Data.Tuple.Ops.GReverseT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) xs xs
instance Data.Tuple.Ops.GReverseT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (x : ys)) zs => Data.Tuple.Ops.GReverseT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (x : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I ys) zs
instance Data.Tuple.Ops.GAppendT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) ys ys
instance Data.Tuple.Ops.GAppendT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) ys (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I zs) => Data.Tuple.Ops.GAppendT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (x : xs)) ys (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (x : zs))
instance Data.Tuple.Ops.GFlattenT '[] (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[])
instance Data.Tuple.Ops.GFlattenT ps (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GFlattenT ('GHC.Types.False : ps) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (x : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (x : xs'))
instance Data.Tuple.Ops.GFoldRight (a -> b -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) b
instance (a ~ a', b ~ b', Data.Tuple.Ops.GFoldRight (a -> b' -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) b) => Data.Tuple.Ops.GFoldRight (a -> b' -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a' : xs)) b
instance Data.Tuple.Ops.GFoldLeft (b -> a -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) b
instance (a ~ a', Data.Tuple.Ops.GFoldLeft (b -> a -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) b) => Data.Tuple.Ops.GFoldLeft (b -> a -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a' : xs)) b
instance Data.Tuple.Ops.GDelete (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs)
instance Data.Tuple.Ops.GDelete (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GDelete (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs'))
instance Data.Tuple.Ops.GSnocT a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[a])
instance Data.Tuple.Ops.GSnocT a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GSnocT a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs'))
instance Data.Tuple.Ops.GConsT a (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs))
instance Data.Tuple.Ops.GMapT f '[] (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[])
instance Data.Tuple.Ops.GMapT (a -> b) apps (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GMapT (a -> b) ('GHC.Types.True : apps) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs'))
instance Data.Tuple.Ops.GMapT f apps (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GMapT f ('GHC.Types.False : apps) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (c : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (c : xs'))
instance (b ~ b') => Data.Tuple.Ops.GAppF b (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[]) b'
instance (a ~ a', Data.Tuple.Ops.GAppF b (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) c) => Data.Tuple.Ops.GAppF (a -> b) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a' : xs)) c
instance Data.Tuple.Ops.GApp (a -> b) ('GHC.Types.True : app) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs))
instance Data.Tuple.Ops.GApp f app (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GApp f ('GHC.Types.False : app) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (c : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (c : xs'))
instance Data.Tuple.Ops.GInitT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[c]) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I '[])
instance Data.Tuple.Ops.GInitT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (b : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs') => Data.Tuple.Ops.GInitT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : b : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs'))
instance Data.Tuple.Ops.GTailT (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs)
instance Data.Tuple.Ops.GSelect (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (t : xs)) t
instance Data.Tuple.Ops.GSelect (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I xs) t => Data.Tuple.Ops.GSelect (Generics.SOP.NP.NP Generics.SOP.BasicFunctors.I (a : xs)) t
