{-# LANGUAGE PostfixOperators #-}
{-# OPTIONS_HADDOCK prune, show-extensions #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  ForSyDe.Core.Utility.Tuple
-- Copyright   :  (c) George Ungureanu, KTH/ICT/ESY 2015-2020
-- License     :  BSD-style (see the file LICENSE)
-- 
-- Maintainer  :  ugeorge@kth.se
-- Stability   :  experimental
-- Portability :  portable
--
-- This module implements general purpose utility functions. It mainly hosts functions
-- dealing with tuples. Utility are provided for up until 9-tuples. Follow the
-- examples in the source code in case it does not suffice.
--
-- __IMPORTANT!!!__ Most of the multi-parameter higher-order functions provided by the
-- library API are named along the lines of @functionMN@ where @M@ represents the
-- number of __/curried/__ inputs (i.e. @a1 -> a2 -> ... -> aM@), while @N@ represents
-- the number of __/tupled/__ outputs (i.e. @(b1,b2,...,bN)@). To avoid repetition we
-- document only functions with 2 inputs and 2 outputs (i.e. @function22@).
-----------------------------------------------------------------------------

module ForSyDe.Atom.Utility.Tuple(
  
  at21, at22,
  at31, at32, at33,
  at41, at42, at43, at44,
  at51, at52, at53, at54, at55,
  at61, at62, at63, at64, at65, at66, 
  at71, at72, at73, at74, at75, at76, at77,
  at81, at82, at83, at84, at85, at86, at87, at88,
  at91, at92, at93, at94, at95, at96, at97, at98, at99,
  
     (|<),    (|<<),    (|<<<),    (|<<<<),    (|<<<<<),    (|<<<<<<),    (|<<<<<<<),    (|<<<<<<<<),
    (||<),   (||<<),   (||<<<),   (||<<<<),   (||<<<<<),   (||<<<<<<),   (||<<<<<<<),   (||<<<<<<<<),
   (|||<),  (|||<<),  (|||<<<),  (|||<<<<),  (|||<<<<<),  (|||<<<<<<),  (|||<<<<<<<),  (|||<<<<<<<<),  
  (||||<), (||||<<), (||||<<<), (||||<<<<), (||||<<<<<), (||||<<<<<<), (||||<<<<<<<), (||||<<<<<<<<), 

  (><),
  (><<),
  (><<<),
  (><<<<),
  (><<<<<),
  (><<<<<<),
  (><<<<<<<),
  (><<<<<<<<),

  ($$),
  ($$$),
  ($$$$),
  ($$$$$),
  ($$$$$$),
  ($$$$$$$),
  ($$$$$$$$),
  ($$$$$$$$$),
  
  ) where

import Prelude hiding (unzip3, filter, (<>))

-- | The @at@/xy/ functions return the /y/-th element of an /x/-tuple.
--
-- "ForSyDe.Atom.Utility" exports the constructors below. Please
-- follow the examples in the source code if they do not suffice:
--
-- > at21, at22,
-- > at31, at32, at33,
-- > at41, at42, at43, at44,
-- > at51, at52, at53, at54, at55,
-- > at61, at62, at63, at64, at65, at66, 
-- > at71, at72, at73, at74, at75, at76, at77,
-- > at81, at82, at83, at84, at85, at86, at87, at88,
-- > at91, at92, at93, at94, at95, at96, at97, at98, at99,
--
-- Example:
--
-- >>>  at53 (1,2,3,4,5)
-- 3
at22 :: (a1, a2) -> a2

at21 :: (a, b) -> a
at21 (x :: a
x,_)             = a
x
at22 :: (a1, a2) -> a2
at22 (_,x :: a2
x)             = a2
x
at31 :: (a, b, c) -> a
at31 (x :: a
x,_,_)           = a
x
at32 :: (a, b, c) -> b
at32 (_,x :: b
x,_)           = b
x
at33 :: (a, b, c) -> c
at33 (_,_,x :: c
x)           = c
x
at41 :: (a, b, c, d) -> a
at41 (x :: a
x,_,_,_)         = a
x
at42 :: (a, b, c, d) -> b
at42 (_,x :: b
x,_,_)         = b
x
at43 :: (a, b, c, d) -> c
at43 (_,_,x :: c
x,_)         = c
x
at44 :: (a, b, c, d) -> d
at44 (_,_,_,x :: d
x)         = d
x
at51 :: (a, b, c, d, e) -> a
at51 (x :: a
x,_,_,_,_)       = a
x
at52 :: (a, b, c, d, e) -> b
at52 (_,x :: b
x,_,_,_)       = b
x
at53 :: (a, b, c, d, e) -> c
at53 (_,_,x :: c
x,_,_)       = c
x
at54 :: (a, b, c, d, e) -> d
at54 (_,_,_,x :: d
x,_)       = d
x
at55 :: (a, b, c, d, e) -> e
at55 (_,_,_,_,x :: e
x)       = e
x
at61 :: (a, b, c, d, e, f) -> a
at61 (x :: a
x,_,_,_,_,_)     = a
x
at62 :: (a, b, c, d, e, f) -> b
at62 (_,x :: b
x,_,_,_,_)     = b
x
at63 :: (a, b, c, d, e, f) -> c
at63 (_,_,x :: c
x,_,_,_)     = c
x
at64 :: (a, b, c, d, e, f) -> d
at64 (_,_,_,x :: d
x,_,_)     = d
x
at65 :: (a, b, c, d, e, f) -> e
at65 (_,_,_,_,x :: e
x,_)     = e
x
at66 :: (a, b, c, d, e, f) -> f
at66 (_,_,_,_,_,x :: f
x)     = f
x
at71 :: (a, b, c, d, e, f, g) -> a
at71 (x :: a
x,_,_,_,_,_,_)   = a
x
at72 :: (a, b, c, d, e, f, g) -> b
at72 (_,x :: b
x,_,_,_,_,_)   = b
x
at73 :: (a, b, c, d, e, f, g) -> c
at73 (_,_,x :: c
x,_,_,_,_)   = c
x
at74 :: (a, b, c, d, e, f, g) -> d
at74 (_,_,_,x :: d
x,_,_,_)   = d
x
at75 :: (a, b, c, d, e, f, g) -> e
at75 (_,_,_,_,x :: e
x,_,_)   = e
x
at76 :: (a, b, c, d, e, f, g) -> f
at76 (_,_,_,_,_,x :: f
x,_)   = f
x
at77 :: (a, b, c, d, e, f, g) -> g
at77 (_,_,_,_,_,_,x :: g
x)   = g
x
at81 :: (a, b, c, d, e, f, g, h) -> a
at81 (x :: a
x,_,_,_,_,_,_,_) = a
x
at82 :: (a, b, c, d, e, f, g, h) -> b
at82 (_,x :: b
x,_,_,_,_,_,_) = b
x
at83 :: (a, b, c, d, e, f, g, h) -> c
at83 (_,_,x :: c
x,_,_,_,_,_) = c
x
at84 :: (a, b, c, d, e, f, g, h) -> d
at84 (_,_,_,x :: d
x,_,_,_,_) = d
x
at85 :: (a, b, c, d, e, f, g, h) -> e
at85 (_,_,_,_,x :: e
x,_,_,_) = e
x
at86 :: (a, b, c, d, e, f, g, h) -> f
at86 (_,_,_,_,_,x :: f
x,_,_) = f
x
at87 :: (a, b, c, d, e, f, g, h) -> g
at87 (_,_,_,_,_,_,x :: g
x,_) = g
x
at88 :: (a, b, c, d, e, f, g, h) -> h
at88 (_,_,_,_,_,_,_,x :: h
x) = h
x
at91 :: (a, b, c, d, e, f, g, h, i) -> a
at91 (x :: a
x,_,_,_,_,_,_,_,_) = a
x
at92 :: (a, b, c, d, e, f, g, h, i) -> b
at92 (_,x :: b
x,_,_,_,_,_,_,_) = b
x
at93 :: (a, b, c, d, e, f, g, h, i) -> c
at93 (_,_,x :: c
x,_,_,_,_,_,_) = c
x
at94 :: (a, b, c, d, e, f, g, h, i) -> d
at94 (_,_,_,x :: d
x,_,_,_,_,_) = d
x
at95 :: (a, b, c, d, e, f, g, h, i) -> e
at95 (_,_,_,_,x :: e
x,_,_,_,_) = e
x
at96 :: (a, b, c, d, e, f, g, h, i) -> f
at96 (_,_,_,_,_,x :: f
x,_,_,_) = f
x
at97 :: (a, b, c, d, e, f, g, h, i) -> g
at97 (_,_,_,_,_,_,x :: g
x,_,_) = g
x
at98 :: (a, b, c, d, e, f, g, h, i) -> h
at98 (_,_,_,_,_,_,_,x :: h
x,_) = h
x
at99 :: (a, b, c, d, e, f, g, h, i) -> i
at99 (_,_,_,_,_,_,_,_,x :: i
x) = i
x


-- | This set of utility functions "unzip" nested n-tuples, provided
-- as postfix operators. They are crucial for reconstructing data
-- types from higher-order functions which input functions with
-- multiple outputs. It relies on the nested types being instances of
-- 'Prelude.Functor'.
--
-- The operator convention is @(|+<+)@, where the number of @|@
-- represent the number of layers the n-tuple is lifted, while the
-- number of @<@ + 1 is the order /n/ of the n-tuple.
--
-- "ForSyDe.Atom.Utility" exports the constructors below. Please
-- follow the examples in the source code if they do not suffice:
--
-- >   |<,    |<<,    |<<<,    |<<<<,    |<<<<<,    |<<<<<<,    |<<<<<<<,    |<<<<<<<<,
-- >  ||<,   ||<<,   ||<<<,   ||<<<<,   ||<<<<<,   ||<<<<<<,   ||<<<<<<<,   ||<<<<<<<<,
-- > |||<,  |||<<,  |||<<<,  |||<<<<,  |||<<<<<,  |||<<<<<<,  |||<<<<<<<,  |||<<<<<<<<,  
-- >||||<, ||||<<, ||||<<<, ||||<<<<, ||||<<<<<, ||||<<<<<<, ||||<<<<<<<, ||||<<<<<<<<, 
--
-- Example:
--
-- >>> :set -XPostfixOperators
-- >>> ([Just (1,2,3), Nothing, Just (4,5,6)] ||<<)
-- ([Just 1,Nothing,Just 4],[Just 2,Nothing,Just 5],[Just 3,Nothing,Just 6])
(||<) :: (Functor f1, Functor f2) => f1 (f2 (a1, a2)) -> (f1 (f2 a1), f1 (f2 a2))

infixl 3 |<, |<<, |<<<, |<<<<, |<<<<<, |<<<<<<, |<<<<<<<, |<<<<<<<<
|< :: f (a1, b) -> (f a1, f b)
(|<)        x :: f (a1, b)
x = ((a1, b) -> a1
forall a b. (a, b) -> a
at21 ((a1, b) -> a1) -> f (a1, b) -> f a1
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a1, b)
x,
                 (a1, b) -> b
forall a1 a2. (a1, a2) -> a2
at22 ((a1, b) -> b) -> f (a1, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a1, b)
x)
|<< :: f (a, b, b) -> (f a, f b, f b)
(|<<)       x :: f (a, b, b)
x = ((a, b, b) -> a
forall a b c. (a, b, c) -> a
at31 ((a, b, b) -> a) -> f (a, b, b) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, b)
x,
                 (a, b, b) -> b
forall a b c. (a, b, c) -> b
at32 ((a, b, b) -> b) -> f (a, b, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, b)
x,
                 (a, b, b) -> b
forall a b c. (a, b, c) -> c
at33 ((a, b, b) -> b) -> f (a, b, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, b)
x)
|<<< :: f (a, b, c, b) -> (f a, f b, f c, f b)
(|<<<)      x :: f (a, b, c, b)
x = ((a, b, c, b) -> a
forall a b c d. (a, b, c, d) -> a
at41 ((a, b, c, b) -> a) -> f (a, b, c, b) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, b)
x,
                 (a, b, c, b) -> b
forall a b c d. (a, b, c, d) -> b
at42 ((a, b, c, b) -> b) -> f (a, b, c, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, b)
x,
                 (a, b, c, b) -> c
forall a b c d. (a, b, c, d) -> c
at43 ((a, b, c, b) -> c) -> f (a, b, c, b) -> f c
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, b)
x,
                 (a, b, c, b) -> b
forall a b c d. (a, b, c, d) -> d
at44 ((a, b, c, b) -> b) -> f (a, b, c, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, b)
x)
|<<<< :: f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
(|<<<<)     x :: f (a, b, c, d, b)
x = ((a, b, c, d, b) -> a
forall a b c d e. (a, b, c, d, e) -> a
at51 ((a, b, c, d, b) -> a) -> f (a, b, c, d, b) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, b)
x,
                 (a, b, c, d, b) -> b
forall a b c d e. (a, b, c, d, e) -> b
at52 ((a, b, c, d, b) -> b) -> f (a, b, c, d, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, b)
x,
                 (a, b, c, d, b) -> c
forall a b c d e. (a, b, c, d, e) -> c
at53 ((a, b, c, d, b) -> c) -> f (a, b, c, d, b) -> f c
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, b)
x,
                 (a, b, c, d, b) -> d
forall a b c d e. (a, b, c, d, e) -> d
at54 ((a, b, c, d, b) -> d) -> f (a, b, c, d, b) -> f d
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, b)
x,
                 (a, b, c, d, b) -> b
forall a b c d e. (a, b, c, d, e) -> e
at55 ((a, b, c, d, b) -> b) -> f (a, b, c, d, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, b)
x)
|<<<<< :: f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
(|<<<<<)    x :: f (a, b, c, d, e, b)
x = ((a, b, c, d, e, b) -> a
forall a b c d e f. (a, b, c, d, e, f) -> a
at61 ((a, b, c, d, e, b) -> a) -> f (a, b, c, d, e, b) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, b)
x,
                 (a, b, c, d, e, b) -> b
forall a b c d e f. (a, b, c, d, e, f) -> b
at62 ((a, b, c, d, e, b) -> b) -> f (a, b, c, d, e, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, b)
x,
                 (a, b, c, d, e, b) -> c
forall a b c d e f. (a, b, c, d, e, f) -> c
at63 ((a, b, c, d, e, b) -> c) -> f (a, b, c, d, e, b) -> f c
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, b)
x,
                 (a, b, c, d, e, b) -> d
forall a b c d e f. (a, b, c, d, e, f) -> d
at64 ((a, b, c, d, e, b) -> d) -> f (a, b, c, d, e, b) -> f d
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, b)
x,
                 (a, b, c, d, e, b) -> e
forall a b c d e f. (a, b, c, d, e, f) -> e
at65 ((a, b, c, d, e, b) -> e) -> f (a, b, c, d, e, b) -> f e
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, b)
x,
                 (a, b, c, d, e, b) -> b
forall a b c d e f. (a, b, c, d, e, f) -> f
at66 ((a, b, c, d, e, b) -> b) -> f (a, b, c, d, e, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, b)
x)
|<<<<<< :: f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
(|<<<<<<)   x :: f (a, b, c, d, e, f, b)
x = ((a, b, c, d, e, f, b) -> a
forall a b c d e f g. (a, b, c, d, e, f, g) -> a
at71 ((a, b, c, d, e, f, b) -> a) -> f (a, b, c, d, e, f, b) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, b)
x,
                 (a, b, c, d, e, f, b) -> b
forall a b c d e f g. (a, b, c, d, e, f, g) -> b
at72 ((a, b, c, d, e, f, b) -> b) -> f (a, b, c, d, e, f, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, b)
x,
                 (a, b, c, d, e, f, b) -> c
forall a b c d e f g. (a, b, c, d, e, f, g) -> c
at73 ((a, b, c, d, e, f, b) -> c) -> f (a, b, c, d, e, f, b) -> f c
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, b)
x,
                 (a, b, c, d, e, f, b) -> d
forall a b c d e f g. (a, b, c, d, e, f, g) -> d
at74 ((a, b, c, d, e, f, b) -> d) -> f (a, b, c, d, e, f, b) -> f d
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, b)
x,
                 (a, b, c, d, e, f, b) -> e
forall a b c d e f g. (a, b, c, d, e, f, g) -> e
at75 ((a, b, c, d, e, f, b) -> e) -> f (a, b, c, d, e, f, b) -> f e
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, b)
x,
                 (a, b, c, d, e, f, b) -> f
forall a b c d e f g. (a, b, c, d, e, f, g) -> f
at76 ((a, b, c, d, e, f, b) -> f) -> f (a, b, c, d, e, f, b) -> f f
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, b)
x,
                 (a, b, c, d, e, f, b) -> b
forall a b c d e f g. (a, b, c, d, e, f, g) -> g
at77 ((a, b, c, d, e, f, b) -> b) -> f (a, b, c, d, e, f, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, b)
x)
|<<<<<<< :: f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
(|<<<<<<<)  x :: f (a, b, c, d, e, f, g, b)
x = ((a, b, c, d, e, f, g, b) -> a
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> a
at81 ((a, b, c, d, e, f, g, b) -> a)
-> f (a, b, c, d, e, f, g, b) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x,
                 (a, b, c, d, e, f, g, b) -> b
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> b
at82 ((a, b, c, d, e, f, g, b) -> b)
-> f (a, b, c, d, e, f, g, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x,
                 (a, b, c, d, e, f, g, b) -> c
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> c
at83 ((a, b, c, d, e, f, g, b) -> c)
-> f (a, b, c, d, e, f, g, b) -> f c
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x,
                 (a, b, c, d, e, f, g, b) -> d
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> d
at84 ((a, b, c, d, e, f, g, b) -> d)
-> f (a, b, c, d, e, f, g, b) -> f d
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x,
                 (a, b, c, d, e, f, g, b) -> e
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> e
at85 ((a, b, c, d, e, f, g, b) -> e)
-> f (a, b, c, d, e, f, g, b) -> f e
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x,
                 (a, b, c, d, e, f, g, b) -> f
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> f
at86 ((a, b, c, d, e, f, g, b) -> f)
-> f (a, b, c, d, e, f, g, b) -> f f
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x,
                 (a, b, c, d, e, f, g, b) -> g
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> g
at87 ((a, b, c, d, e, f, g, b) -> g)
-> f (a, b, c, d, e, f, g, b) -> f g
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x,
                 (a, b, c, d, e, f, g, b) -> b
forall a b c d e f g h. (a, b, c, d, e, f, g, h) -> h
at88 ((a, b, c, d, e, f, g, b) -> b)
-> f (a, b, c, d, e, f, g, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, b)
x)
|<<<<<<<< :: f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
(|<<<<<<<<) x :: f (a, b, c, d, e, f, g, h, b)
x = ((a, b, c, d, e, f, g, h, b) -> a
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> a
at91 ((a, b, c, d, e, f, g, h, b) -> a)
-> f (a, b, c, d, e, f, g, h, b) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> b
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> b
at92 ((a, b, c, d, e, f, g, h, b) -> b)
-> f (a, b, c, d, e, f, g, h, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> c
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> c
at93 ((a, b, c, d, e, f, g, h, b) -> c)
-> f (a, b, c, d, e, f, g, h, b) -> f c
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> d
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> d
at94 ((a, b, c, d, e, f, g, h, b) -> d)
-> f (a, b, c, d, e, f, g, h, b) -> f d
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> e
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> e
at95 ((a, b, c, d, e, f, g, h, b) -> e)
-> f (a, b, c, d, e, f, g, h, b) -> f e
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> f
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> f
at96 ((a, b, c, d, e, f, g, h, b) -> f)
-> f (a, b, c, d, e, f, g, h, b) -> f f
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> g
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> g
at97 ((a, b, c, d, e, f, g, h, b) -> g)
-> f (a, b, c, d, e, f, g, h, b) -> f g
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> h
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> h
at98 ((a, b, c, d, e, f, g, h, b) -> h)
-> f (a, b, c, d, e, f, g, h, b) -> f h
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x,
                 (a, b, c, d, e, f, g, h, b) -> b
forall a b c d e f g h i. (a, b, c, d, e, f, g, h, i) -> i
at99 ((a, b, c, d, e, f, g, h, b) -> b)
-> f (a, b, c, d, e, f, g, h, b) -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (a, b, c, d, e, f, g, h, b)
x)  

infixl 3 ||<, ||<<, ||<<<, ||<<<<, ||<<<<<, ||<<<<<<, ||<<<<<<<, ||<<<<<<<<
||< :: f1 (f2 (a1, a2)) -> (f1 (f2 a1), f1 (f2 a2))
(||<)        s :: f1 (f2 (a1, a2))
s = (f2 (a1, a2) -> (f2 a1, f2 a2)
forall (f :: * -> *) a1 b. Functor f => f (a1, b) -> (f a1, f b)
(|<) (f2 (a1, a2) -> (f2 a1, f2 a2))
-> f1 (f2 (a1, a2)) -> f1 (f2 a1, f2 a2)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f1 (f2 (a1, a2))
s        f1 (f2 a1, f2 a2) -> (f1 (f2 a1), f1 (f2 a2))
forall (f :: * -> *) a1 b. Functor f => f (a1, b) -> (f a1, f b)
|<)
||<< :: f (f (a, b, b)) -> (f (f a), f (f b), f (f b))
(||<<)       s :: f (f (a, b, b))
s = (f (a, b, b) -> (f a, f b, f b)
forall (f :: * -> *) a b b.
Functor f =>
f (a, b, b) -> (f a, f b, f b)
(|<<) (f (a, b, b) -> (f a, f b, f b))
-> f (f (a, b, b)) -> f (f a, f b, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (a, b, b))
s       f (f a, f b, f b) -> (f (f a), f (f b), f (f b))
forall (f :: * -> *) a b b.
Functor f =>
f (a, b, b) -> (f a, f b, f b)
|<<)
||<<< :: f (f (a, b, c, b)) -> (f (f a), f (f b), f (f c), f (f b))
(||<<<)      s :: f (f (a, b, c, b))
s = (f (a, b, c, b) -> (f a, f b, f c, f b)
forall (f :: * -> *) a b c b.
Functor f =>
f (a, b, c, b) -> (f a, f b, f c, f b)
(|<<<) (f (a, b, c, b) -> (f a, f b, f c, f b))
-> f (f (a, b, c, b)) -> f (f a, f b, f c, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (a, b, c, b))
s      f (f a, f b, f c, f b) -> (f (f a), f (f b), f (f c), f (f b))
forall (f :: * -> *) a b c b.
Functor f =>
f (a, b, c, b) -> (f a, f b, f c, f b)
|<<<)
||<<<< :: f (f (a, b, c, d, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f b))
(||<<<<)     s :: f (f (a, b, c, d, b))
s = (f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
forall (f :: * -> *) a b c d b.
Functor f =>
f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
(|<<<<) (f (a, b, c, d, b) -> (f a, f b, f c, f d, f b))
-> f (f (a, b, c, d, b)) -> f (f a, f b, f c, f d, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (a, b, c, d, b))
s     f (f a, f b, f c, f d, f b)
-> (f (f a), f (f b), f (f c), f (f d), f (f b))
forall (f :: * -> *) a b c d b.
Functor f =>
f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
|<<<<)
||<<<<< :: f (f (a, b, c, d, e, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f b))
(||<<<<<)    s :: f (f (a, b, c, d, e, b))
s = (f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
forall (f :: * -> *) a b c d e b.
Functor f =>
f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
(|<<<<<) (f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b))
-> f (f (a, b, c, d, e, b)) -> f (f a, f b, f c, f d, f e, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (a, b, c, d, e, b))
s    f (f a, f b, f c, f d, f e, f b)
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f b))
forall (f :: * -> *) a b c d e b.
Functor f =>
f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
|<<<<<)
||<<<<<< :: f (f (a, b, c, d, e, f, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f b))
(||<<<<<<)   s :: f (f (a, b, c, d, e, f, b))
s = (f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
forall (f :: * -> *) a b c d e f b.
Functor f =>
f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
(|<<<<<<) (f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b))
-> f (f (a, b, c, d, e, f, b))
-> f (f a, f b, f c, f d, f e, f f, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (a, b, c, d, e, f, b))
s   f (f a, f b, f c, f d, f e, f f, f b)
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f b))
forall (f :: * -> *) a b c d e f b.
Functor f =>
f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
|<<<<<<)
||<<<<<<< :: f (f (a, b, c, d, e, f, g, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f g),
    f (f b))
(||<<<<<<<)  s :: f (f (a, b, c, d, e, f, g, b))
s = (f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
forall (f :: * -> *) a b c d e f g b.
Functor f =>
f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
(|<<<<<<<) (f (a, b, c, d, e, f, g, b)
 -> (f a, f b, f c, f d, f e, f f, f g, f b))
-> f (f (a, b, c, d, e, f, g, b))
-> f (f a, f b, f c, f d, f e, f f, f g, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (a, b, c, d, e, f, g, b))
s  f (f a, f b, f c, f d, f e, f f, f g, f b)
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f g),
    f (f b))
forall (f :: * -> *) a b c d e f g b.
Functor f =>
f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
|<<<<<<<)
||<<<<<<<< :: f (f (a, b, c, d, e, f, g, h, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f g),
    f (f h), f (f b))
(||<<<<<<<<) s :: f (f (a, b, c, d, e, f, g, h, b))
s = (f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
forall (f :: * -> *) a b c d e f g h b.
Functor f =>
f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
(|<<<<<<<<) (f (a, b, c, d, e, f, g, h, b)
 -> (f a, f b, f c, f d, f e, f f, f g, f h, f b))
-> f (f (a, b, c, d, e, f, g, h, b))
-> f (f a, f b, f c, f d, f e, f f, f g, f h, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (a, b, c, d, e, f, g, h, b))
s f (f a, f b, f c, f d, f e, f f, f g, f h, f b)
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f g),
    f (f h), f (f b))
forall (f :: * -> *) a b c d e f g h b.
Functor f =>
f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
|<<<<<<<<)


infixl 3 |||<,  |||<<, |||<<<, |||<<<<, |||<<<<<, |||<<<<<<, |||<<<<<<<, |||<<<<<<<<
|||< :: f1 (f2 (f (a1, b))) -> (f1 (f2 (f a1)), f1 (f2 (f b)))
(|||<)        s :: f1 (f2 (f (a1, b)))
s = ((f (a1, b) -> (f a1, f b)
forall (f :: * -> *) a1 b. Functor f => f (a1, b) -> (f a1, f b)
(|<) (f (a1, b) -> (f a1, f b)) -> f2 (f (a1, b)) -> f2 (f a1, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f2 (f (a1, b)) -> f2 (f a1, f b))
-> f1 (f2 (f (a1, b))) -> f1 (f2 (f a1, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f1 (f2 (f (a1, b)))
s        f1 (f2 (f a1, f b)) -> (f1 (f2 (f a1)), f1 (f2 (f b)))
forall (f1 :: * -> *) (f2 :: * -> *) a1 a2.
(Functor f1, Functor f2) =>
f1 (f2 (a1, a2)) -> (f1 (f2 a1), f1 (f2 a2))
||<)
|||<< :: f (f (f (a, b, b))) -> (f (f (f a)), f (f (f b)), f (f (f b)))
(|||<<)       s :: f (f (f (a, b, b)))
s = ((f (a, b, b) -> (f a, f b, f b)
forall (f :: * -> *) a b b.
Functor f =>
f (a, b, b) -> (f a, f b, f b)
(|<<) (f (a, b, b) -> (f a, f b, f b))
-> f (f (a, b, b)) -> f (f a, f b, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, b)) -> f (f a, f b, f b))
-> f (f (f (a, b, b))) -> f (f (f a, f b, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (a, b, b)))
s       f (f (f a, f b, f b)) -> (f (f (f a)), f (f (f b)), f (f (f b)))
forall (f :: * -> *) (f :: * -> *) a b b.
(Functor f, Functor f) =>
f (f (a, b, b)) -> (f (f a), f (f b), f (f b))
||<<)
|||<<< :: f (f (f (a, b, c, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f b)))
(|||<<<)      s :: f (f (f (a, b, c, b)))
s = ((f (a, b, c, b) -> (f a, f b, f c, f b)
forall (f :: * -> *) a b c b.
Functor f =>
f (a, b, c, b) -> (f a, f b, f c, f b)
(|<<<) (f (a, b, c, b) -> (f a, f b, f c, f b))
-> f (f (a, b, c, b)) -> f (f a, f b, f c, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, b)) -> f (f a, f b, f c, f b))
-> f (f (f (a, b, c, b))) -> f (f (f a, f b, f c, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (a, b, c, b)))
s      f (f (f a, f b, f c, f b))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f b)))
forall (f :: * -> *) (f :: * -> *) a b c b.
(Functor f, Functor f) =>
f (f (a, b, c, b)) -> (f (f a), f (f b), f (f c), f (f b))
||<<<)
|||<<<< :: f (f (f (a, b, c, d, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f b)))
(|||<<<<)     s :: f (f (f (a, b, c, d, b)))
s = ((f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
forall (f :: * -> *) a b c d b.
Functor f =>
f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
(|<<<<) (f (a, b, c, d, b) -> (f a, f b, f c, f d, f b))
-> f (f (a, b, c, d, b)) -> f (f a, f b, f c, f d, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, b)) -> f (f a, f b, f c, f d, f b))
-> f (f (f (a, b, c, d, b))) -> f (f (f a, f b, f c, f d, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (a, b, c, d, b)))
s     f (f (f a, f b, f c, f d, f b))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f b)))
forall (f :: * -> *) (f :: * -> *) a b c d b.
(Functor f, Functor f) =>
f (f (a, b, c, d, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f b))
||<<<<)
|||<<<<< :: f (f (f (a, b, c, d, e, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f b)))
(|||<<<<<)    s :: f (f (f (a, b, c, d, e, b)))
s = ((f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
forall (f :: * -> *) a b c d e b.
Functor f =>
f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
(|<<<<<) (f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b))
-> f (f (a, b, c, d, e, b)) -> f (f a, f b, f c, f d, f e, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, b)) -> f (f a, f b, f c, f d, f e, f b))
-> f (f (f (a, b, c, d, e, b)))
-> f (f (f a, f b, f c, f d, f e, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (a, b, c, d, e, b)))
s    f (f (f a, f b, f c, f d, f e, f b))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f b)))
forall (f :: * -> *) (f :: * -> *) a b c d e b.
(Functor f, Functor f) =>
f (f (a, b, c, d, e, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f b))
||<<<<<)
|||<<<<<< :: f (f (f (a, b, c, d, e, f, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f b)))
(|||<<<<<<)   s :: f (f (f (a, b, c, d, e, f, b)))
s = ((f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
forall (f :: * -> *) a b c d e f b.
Functor f =>
f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
(|<<<<<<) (f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b))
-> f (f (a, b, c, d, e, f, b))
-> f (f a, f b, f c, f d, f e, f f, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, f, b))
 -> f (f a, f b, f c, f d, f e, f f, f b))
-> f (f (f (a, b, c, d, e, f, b)))
-> f (f (f a, f b, f c, f d, f e, f f, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (a, b, c, d, e, f, b)))
s   f (f (f a, f b, f c, f d, f e, f f, f b))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f b)))
forall (f :: * -> *) (f :: * -> *) a b c d e f b.
(Functor f, Functor f) =>
f (f (a, b, c, d, e, f, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f b))
||<<<<<<)
|||<<<<<<< :: f (f (f (a, b, c, d, e, f, g, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f g)), f (f (f b)))
(|||<<<<<<<)  s :: f (f (f (a, b, c, d, e, f, g, b)))
s = ((f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
forall (f :: * -> *) a b c d e f g b.
Functor f =>
f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
(|<<<<<<<) (f (a, b, c, d, e, f, g, b)
 -> (f a, f b, f c, f d, f e, f f, f g, f b))
-> f (f (a, b, c, d, e, f, g, b))
-> f (f a, f b, f c, f d, f e, f f, f g, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, f, g, b))
 -> f (f a, f b, f c, f d, f e, f f, f g, f b))
-> f (f (f (a, b, c, d, e, f, g, b)))
-> f (f (f a, f b, f c, f d, f e, f f, f g, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (a, b, c, d, e, f, g, b)))
s  f (f (f a, f b, f c, f d, f e, f f, f g, f b))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f g)), f (f (f b)))
forall (f :: * -> *) (f :: * -> *) a b c d e f g b.
(Functor f, Functor f) =>
f (f (a, b, c, d, e, f, g, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f g),
    f (f b))
||<<<<<<<)
|||<<<<<<<< :: f (f (f (a, b, c, d, e, f, g, h, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f g)), f (f (f h)), f (f (f b)))
(|||<<<<<<<<) s :: f (f (f (a, b, c, d, e, f, g, h, b)))
s = ((f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
forall (f :: * -> *) a b c d e f g h b.
Functor f =>
f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
(|<<<<<<<<) (f (a, b, c, d, e, f, g, h, b)
 -> (f a, f b, f c, f d, f e, f f, f g, f h, f b))
-> f (f (a, b, c, d, e, f, g, h, b))
-> f (f a, f b, f c, f d, f e, f f, f g, f h, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, f, g, h, b))
 -> f (f a, f b, f c, f d, f e, f f, f g, f h, f b))
-> f (f (f (a, b, c, d, e, f, g, h, b)))
-> f (f (f a, f b, f c, f d, f e, f f, f g, f h, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (a, b, c, d, e, f, g, h, b)))
s f (f (f a, f b, f c, f d, f e, f f, f g, f h, f b))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f g)), f (f (f h)), f (f (f b)))
forall (f :: * -> *) (f :: * -> *) a b c d e f g h b.
(Functor f, Functor f) =>
f (f (a, b, c, d, e, f, g, h, b))
-> (f (f a), f (f b), f (f c), f (f d), f (f e), f (f f), f (f g),
    f (f h), f (f b))
||<<<<<<<<)


infixl 3 ||||<,  ||||<<, ||||<<<, ||||<<<<, ||||<<<<<, ||||<<<<<<, ||||<<<<<<<, ||||<<<<<<<<
||||< :: f1 (f2 (f (f (a1, b)))) -> (f1 (f2 (f (f a1))), f1 (f2 (f (f b))))
(||||<)        s :: f1 (f2 (f (f (a1, b))))
s = (((f (a1, b) -> (f a1, f b)
forall (f :: * -> *) a1 b. Functor f => f (a1, b) -> (f a1, f b)
(|<) (f (a1, b) -> (f a1, f b)) -> f (f (a1, b)) -> f (f a1, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a1, b)) -> f (f a1, f b))
-> f2 (f (f (a1, b))) -> f2 (f (f a1, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f2 (f (f (a1, b))) -> f2 (f (f a1, f b)))
-> f1 (f2 (f (f (a1, b)))) -> f1 (f2 (f (f a1, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f1 (f2 (f (f (a1, b))))
s        f1 (f2 (f (f a1, f b))) -> (f1 (f2 (f (f a1))), f1 (f2 (f (f b))))
forall (f1 :: * -> *) (f2 :: * -> *) (f :: * -> *) a1 b.
(Functor f1, Functor f2, Functor f) =>
f1 (f2 (f (a1, b))) -> (f1 (f2 (f a1)), f1 (f2 (f b)))
|||<)
||||<< :: f (f (f (f (a, b, b))))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f b))))
(||||<<)       s :: f (f (f (f (a, b, b))))
s = (((f (a, b, b) -> (f a, f b, f b)
forall (f :: * -> *) a b b.
Functor f =>
f (a, b, b) -> (f a, f b, f b)
(|<<) (f (a, b, b) -> (f a, f b, f b))
-> f (f (a, b, b)) -> f (f a, f b, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, b)) -> f (f a, f b, f b))
-> f (f (f (a, b, b))) -> f (f (f a, f b, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (f (a, b, b))) -> f (f (f a, f b, f b)))
-> f (f (f (f (a, b, b)))) -> f (f (f (f a, f b, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (f (a, b, b))))
s       f (f (f (f a, f b, f b)))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f b))))
forall (f :: * -> *) (f :: * -> *) (f :: * -> *) a b b.
(Functor f, Functor f, Functor f) =>
f (f (f (a, b, b))) -> (f (f (f a)), f (f (f b)), f (f (f b)))
|||<<)
||||<<< :: f (f (f (f (a, b, c, b))))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f b))))
(||||<<<)      s :: f (f (f (f (a, b, c, b))))
s = (((f (a, b, c, b) -> (f a, f b, f c, f b)
forall (f :: * -> *) a b c b.
Functor f =>
f (a, b, c, b) -> (f a, f b, f c, f b)
(|<<<) (f (a, b, c, b) -> (f a, f b, f c, f b))
-> f (f (a, b, c, b)) -> f (f a, f b, f c, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, b)) -> f (f a, f b, f c, f b))
-> f (f (f (a, b, c, b))) -> f (f (f a, f b, f c, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (f (a, b, c, b))) -> f (f (f a, f b, f c, f b)))
-> f (f (f (f (a, b, c, b)))) -> f (f (f (f a, f b, f c, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (f (a, b, c, b))))
s      f (f (f (f a, f b, f c, f b)))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f b))))
forall (f :: * -> *) (f :: * -> *) (f :: * -> *) a b c b.
(Functor f, Functor f, Functor f) =>
f (f (f (a, b, c, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f b)))
|||<<<)
||||<<<< :: f (f (f (f (a, b, c, d, b))))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f b))))
(||||<<<<)     s :: f (f (f (f (a, b, c, d, b))))
s = (((f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
forall (f :: * -> *) a b c d b.
Functor f =>
f (a, b, c, d, b) -> (f a, f b, f c, f d, f b)
(|<<<<) (f (a, b, c, d, b) -> (f a, f b, f c, f d, f b))
-> f (f (a, b, c, d, b)) -> f (f a, f b, f c, f d, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, b)) -> f (f a, f b, f c, f d, f b))
-> f (f (f (a, b, c, d, b))) -> f (f (f a, f b, f c, f d, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (f (a, b, c, d, b))) -> f (f (f a, f b, f c, f d, f b)))
-> f (f (f (f (a, b, c, d, b))))
-> f (f (f (f a, f b, f c, f d, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (f (a, b, c, d, b))))
s     f (f (f (f a, f b, f c, f d, f b)))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f b))))
forall (f :: * -> *) (f :: * -> *) (f :: * -> *) a b c d b.
(Functor f, Functor f, Functor f) =>
f (f (f (a, b, c, d, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f b)))
|||<<<<)
||||<<<<< :: f (f (f (f (a, b, c, d, e, b))))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f b))))
(||||<<<<<)    s :: f (f (f (f (a, b, c, d, e, b))))
s = (((f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
forall (f :: * -> *) a b c d e b.
Functor f =>
f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b)
(|<<<<<) (f (a, b, c, d, e, b) -> (f a, f b, f c, f d, f e, f b))
-> f (f (a, b, c, d, e, b)) -> f (f a, f b, f c, f d, f e, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, b)) -> f (f a, f b, f c, f d, f e, f b))
-> f (f (f (a, b, c, d, e, b)))
-> f (f (f a, f b, f c, f d, f e, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (f (a, b, c, d, e, b)))
 -> f (f (f a, f b, f c, f d, f e, f b)))
-> f (f (f (f (a, b, c, d, e, b))))
-> f (f (f (f a, f b, f c, f d, f e, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (f (a, b, c, d, e, b))))
s    f (f (f (f a, f b, f c, f d, f e, f b)))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f b))))
forall (f :: * -> *) (f :: * -> *) (f :: * -> *) a b c d e b.
(Functor f, Functor f, Functor f) =>
f (f (f (a, b, c, d, e, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f b)))
|||<<<<<)
||||<<<<<< :: f (f (f (f (a, b, c, d, e, f, b))))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f f))), f (f (f (f b))))
(||||<<<<<<)   s :: f (f (f (f (a, b, c, d, e, f, b))))
s = (((f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
forall (f :: * -> *) a b c d e f b.
Functor f =>
f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b)
(|<<<<<<) (f (a, b, c, d, e, f, b) -> (f a, f b, f c, f d, f e, f f, f b))
-> f (f (a, b, c, d, e, f, b))
-> f (f a, f b, f c, f d, f e, f f, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, f, b))
 -> f (f a, f b, f c, f d, f e, f f, f b))
-> f (f (f (a, b, c, d, e, f, b)))
-> f (f (f a, f b, f c, f d, f e, f f, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (f (a, b, c, d, e, f, b)))
 -> f (f (f a, f b, f c, f d, f e, f f, f b)))
-> f (f (f (f (a, b, c, d, e, f, b))))
-> f (f (f (f a, f b, f c, f d, f e, f f, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (f (a, b, c, d, e, f, b))))
s   f (f (f (f a, f b, f c, f d, f e, f f, f b)))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f f))), f (f (f (f b))))
forall (f :: * -> *) (f :: * -> *) (f :: * -> *) a b c d e f b.
(Functor f, Functor f, Functor f) =>
f (f (f (a, b, c, d, e, f, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f b)))
|||<<<<<<)
||||<<<<<<< :: f (f (f (f (a, b, c, d, e, f, g, b))))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f f))), f (f (f (f g))),
    f (f (f (f b))))
(||||<<<<<<<)  s :: f (f (f (f (a, b, c, d, e, f, g, b))))
s = (((f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
forall (f :: * -> *) a b c d e f g b.
Functor f =>
f (a, b, c, d, e, f, g, b)
-> (f a, f b, f c, f d, f e, f f, f g, f b)
(|<<<<<<<) (f (a, b, c, d, e, f, g, b)
 -> (f a, f b, f c, f d, f e, f f, f g, f b))
-> f (f (a, b, c, d, e, f, g, b))
-> f (f a, f b, f c, f d, f e, f f, f g, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, f, g, b))
 -> f (f a, f b, f c, f d, f e, f f, f g, f b))
-> f (f (f (a, b, c, d, e, f, g, b)))
-> f (f (f a, f b, f c, f d, f e, f f, f g, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (f (a, b, c, d, e, f, g, b)))
 -> f (f (f a, f b, f c, f d, f e, f f, f g, f b)))
-> f (f (f (f (a, b, c, d, e, f, g, b))))
-> f (f (f (f a, f b, f c, f d, f e, f f, f g, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (f (a, b, c, d, e, f, g, b))))
s  f (f (f (f a, f b, f c, f d, f e, f f, f g, f b)))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f f))), f (f (f (f g))),
    f (f (f (f b))))
forall (f :: * -> *) (f :: * -> *) (f :: * -> *) a b c d e f g b.
(Functor f, Functor f, Functor f) =>
f (f (f (a, b, c, d, e, f, g, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f g)), f (f (f b)))
|||<<<<<<<)
||||<<<<<<<< :: f (f (f (f (a, b, c, d, e, f, g, h, b))))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f f))), f (f (f (f g))),
    f (f (f (f h))), f (f (f (f b))))
(||||<<<<<<<<) s :: f (f (f (f (a, b, c, d, e, f, g, h, b))))
s = (((f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
forall (f :: * -> *) a b c d e f g h b.
Functor f =>
f (a, b, c, d, e, f, g, h, b)
-> (f a, f b, f c, f d, f e, f f, f g, f h, f b)
(|<<<<<<<<) (f (a, b, c, d, e, f, g, h, b)
 -> (f a, f b, f c, f d, f e, f f, f g, f h, f b))
-> f (f (a, b, c, d, e, f, g, h, b))
-> f (f a, f b, f c, f d, f e, f f, f g, f h, f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (a, b, c, d, e, f, g, h, b))
 -> f (f a, f b, f c, f d, f e, f f, f g, f h, f b))
-> f (f (f (a, b, c, d, e, f, g, h, b)))
-> f (f (f a, f b, f c, f d, f e, f f, f g, f h, f b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (f (f (f (a, b, c, d, e, f, g, h, b)))
 -> f (f (f a, f b, f c, f d, f e, f f, f g, f h, f b)))
-> f (f (f (f (a, b, c, d, e, f, g, h, b))))
-> f (f (f (f a, f b, f c, f d, f e, f f, f g, f h, f b)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f (f (f (a, b, c, d, e, f, g, h, b))))
s f (f (f (f a, f b, f c, f d, f e, f f, f g, f h, f b)))
-> (f (f (f (f a))), f (f (f (f b))), f (f (f (f c))),
    f (f (f (f d))), f (f (f (f e))), f (f (f (f f))), f (f (f (f g))),
    f (f (f (f h))), f (f (f (f b))))
forall (f :: * -> *) (f :: * -> *) (f :: * -> *) a b c d e f g h b.
(Functor f, Functor f, Functor f) =>
f (f (f (a, b, c, d, e, f, g, h, b)))
-> (f (f (f a)), f (f (f b)), f (f (f c)), f (f (f d)),
    f (f (f e)), f (f (f f)), f (f (f g)), f (f (f h)), f (f (f b)))
|||<<<<<<<<)


-- | Infix currying operators used for convenience. 
--
-- The operator convention is @(><+)@, where the number of @<@ + 1 is
-- the order /n/ of the n-tuple.
--
-- "ForSyDe.Atom.Utility" exports the constructors below. Please
-- follow the examples in the source code if they do not suffice:
--
-- > ><, ><<, ><<<, ><<<<, ><<<<<, ><<<<<<, ><<<<<<<, ><<<<<<<<
--
-- Example:
--
-- >>> (+) >< (1,2)
-- 3
(><) :: (a1 -> a2 -> b1) -> (a1, a2) -> b1

infixl 6 ><,  ><<, ><<<, ><<<<, ><<<<<, ><<<<<<, ><<<<<<<, ><<<<<<<<
f :: a1 -> a2 -> b1
f >< :: (a1 -> a2 -> b1) -> (a1, a2) -> b1
><        (a1 :: a1
a1, a2 :: a2
a2)                             = a1 -> a2 -> b1
f a1
a1 a2
a2
f :: t -> t -> t -> t
f ><< :: (t -> t -> t -> t) -> (t, t, t) -> t
><<       (a1 :: t
a1, a2 :: t
a2, a3 :: t
a3)                         = t -> t -> t -> t
f t
a1 t
a2 t
a3
f :: t -> t -> t -> t -> t
f ><<< :: (t -> t -> t -> t -> t) -> (t, t, t, t) -> t
><<<      (a1 :: t
a1, a2 :: t
a2, a3 :: t
a3, a4 :: t
a4)                     = t -> t -> t -> t -> t
f t
a1 t
a2 t
a3 t
a4
f :: t -> t -> t -> t -> t -> t
f ><<<< :: (t -> t -> t -> t -> t -> t) -> (t, t, t, t, t) -> t
><<<<     (a1 :: t
a1, a2 :: t
a2, a3 :: t
a3, a4 :: t
a4, a5 :: t
a5)                 = t -> t -> t -> t -> t -> t
f t
a1 t
a2 t
a3 t
a4 t
a5
f :: t -> t -> t -> t -> t -> t -> t
f ><<<<< :: (t -> t -> t -> t -> t -> t -> t) -> (t, t, t, t, t, t) -> t
><<<<<    (a1 :: t
a1, a2 :: t
a2, a3 :: t
a3, a4 :: t
a4, a5 :: t
a5, a6 :: t
a6)             = t -> t -> t -> t -> t -> t -> t
f t
a1 t
a2 t
a3 t
a4 t
a5 t
a6
f :: t -> t -> t -> t -> t -> t -> t -> t
f ><<<<<< :: (t -> t -> t -> t -> t -> t -> t -> t)
-> (t, t, t, t, t, t, t) -> t
><<<<<<   (a1 :: t
a1, a2 :: t
a2, a3 :: t
a3, a4 :: t
a4, a5 :: t
a5, a6 :: t
a6, a7 :: t
a7)         = t -> t -> t -> t -> t -> t -> t -> t
f t
a1 t
a2 t
a3 t
a4 t
a5 t
a6 t
a7
f :: t -> t -> t -> t -> t -> t -> t -> t -> t
f ><<<<<<< :: (t -> t -> t -> t -> t -> t -> t -> t -> t)
-> (t, t, t, t, t, t, t, t) -> t
><<<<<<<  (a1 :: t
a1, a2 :: t
a2, a3 :: t
a3, a4 :: t
a4, a5 :: t
a5, a6 :: t
a6, a7 :: t
a7, a8 :: t
a8)     = t -> t -> t -> t -> t -> t -> t -> t -> t
f t
a1 t
a2 t
a3 t
a4 t
a5 t
a6 t
a7 t
a8
f :: t -> t -> t -> t -> t -> t -> t -> t -> t -> t
f ><<<<<<<< :: (t -> t -> t -> t -> t -> t -> t -> t -> t -> t)
-> (t, t, t, t, t, t, t, t, t) -> t
><<<<<<<< (a1 :: t
a1, a2 :: t
a2, a3 :: t
a3, a4 :: t
a4, a5 :: t
a5, a6 :: t
a6, a7 :: t
a7, a8 :: t
a8, a9 :: t
a9) = t -> t -> t -> t -> t -> t -> t -> t -> t -> t
f t
a1 t
a2 t
a3 t
a4 t
a5 t
a6 t
a7 t
a8 t
a9


-- | Infix function application operator for tuples. 
--
-- The operator convention is @($+)@, where the number of @$@ is the
-- order /n/ of the n-tuple. For Applying a function on nontuples we
-- rely on 'Prelude.$' provided by "Prelude".
--
-- "ForSyDe.Atom.Utility" exports the constructors below. Please
-- follow the examples in the source code if they do not suffice:
--
-- > $$, $$$, $$$$, $$$$$, $$$$$$, $$$$$$$, $$$$$$$$, $$$$$$$$$
--
-- Example:
--
-- >>> ((+),(-)) $$ (1,1) $$ (2,2) 
-- (3,-1)
($$) :: (a1 -> b1, a2 -> b2) -> (a1, a2) -> (b1, b2)

infixl 6 $$, $$$, $$$$, $$$$$, $$$$$$, $$$$$$$, $$$$$$$$, $$$$$$$$$
(f1 :: a1 -> b1
f1,f2 :: a2 -> b2
f2)                      $$ :: (a1 -> b1, a2 -> b2) -> (a1, a2) -> (b1, b2)
$$        (a1 :: a1
a1,a2 :: a2
a2)                      = (a1 -> b1
f1 a1
a1, a2 -> b2
f2 a2
a2)
(f1 :: t -> a
f1,f2 :: t -> b
f2,f3 :: t -> c
f3)                   $$$ :: (t -> a, t -> b, t -> c) -> (t, t, t) -> (a, b, c)
$$$       (a1 :: t
a1,a2 :: t
a2,a3 :: t
a3)                   = (t -> a
f1 t
a1, t -> b
f2 t
a2, t -> c
f3 t
a3)
(f1 :: t -> a
f1,f2 :: t -> b
f2,f3 :: t -> c
f3,f4 :: t -> d
f4)                $$$$ :: (t -> a, t -> b, t -> c, t -> d) -> (t, t, t, t) -> (a, b, c, d)
$$$$      (a1 :: t
a1,a2 :: t
a2,a3 :: t
a3,a4 :: t
a4)                = (t -> a
f1 t
a1, t -> b
f2 t
a2, t -> c
f3 t
a3, t -> d
f4 t
a4)
(f1 :: t -> a
f1,f2 :: t -> b
f2,f3 :: t -> c
f3,f4 :: t -> d
f4,f5 :: t -> e
f5)             $$$$$ :: (t -> a, t -> b, t -> c, t -> d, t -> e)
-> (t, t, t, t, t) -> (a, b, c, d, e)
$$$$$     (a1 :: t
a1,a2 :: t
a2,a3 :: t
a3,a4 :: t
a4,a5 :: t
a5)             = (t -> a
f1 t
a1, t -> b
f2 t
a2, t -> c
f3 t
a3, t -> d
f4 t
a4, t -> e
f5 t
a5)
(f1 :: t -> a
f1,f2 :: t -> b
f2,f3 :: t -> c
f3,f4 :: t -> d
f4,f5 :: t -> e
f5,f6 :: t -> f
f6)          $$$$$$ :: (t -> a, t -> b, t -> c, t -> d, t -> e, t -> f)
-> (t, t, t, t, t, t) -> (a, b, c, d, e, f)
$$$$$$    (a1 :: t
a1,a2 :: t
a2,a3 :: t
a3,a4 :: t
a4,a5 :: t
a5,a6 :: t
a6)          = (t -> a
f1 t
a1, t -> b
f2 t
a2, t -> c
f3 t
a3, t -> d
f4 t
a4, t -> e
f5 t
a5, t -> f
f6 t
a6)
(f1 :: t -> a
f1,f2 :: t -> b
f2,f3 :: t -> c
f3,f4 :: t -> d
f4,f5 :: t -> e
f5,f6 :: t -> f
f6,f7 :: t -> g
f7)       $$$$$$$ :: (t -> a, t -> b, t -> c, t -> d, t -> e, t -> f, t -> g)
-> (t, t, t, t, t, t, t) -> (a, b, c, d, e, f, g)
$$$$$$$   (a1 :: t
a1,a2 :: t
a2,a3 :: t
a3,a4 :: t
a4,a5 :: t
a5,a6 :: t
a6,a7 :: t
a7)       = (t -> a
f1 t
a1, t -> b
f2 t
a2, t -> c
f3 t
a3, t -> d
f4 t
a4, t -> e
f5 t
a5, t -> f
f6 t
a6, t -> g
f7 t
a7)
(f1 :: t -> a
f1,f2 :: t -> b
f2,f3 :: t -> c
f3,f4 :: t -> d
f4,f5 :: t -> e
f5,f6 :: t -> f
f6,f7 :: t -> g
f7,f8 :: t -> h
f8)    $$$$$$$$ :: (t -> a, t -> b, t -> c, t -> d, t -> e, t -> f, t -> g, t -> h)
-> (t, t, t, t, t, t, t, t) -> (a, b, c, d, e, f, g, h)
$$$$$$$$  (a1 :: t
a1,a2 :: t
a2,a3 :: t
a3,a4 :: t
a4,a5 :: t
a5,a6 :: t
a6,a7 :: t
a7,a8 :: t
a8)    = (t -> a
f1 t
a1, t -> b
f2 t
a2, t -> c
f3 t
a3, t -> d
f4 t
a4, t -> e
f5 t
a5, t -> f
f6 t
a6, t -> g
f7 t
a7, t -> h
f8 t
a8)
(f1 :: t -> a
f1,f2 :: t -> b
f2,f3 :: t -> c
f3,f4 :: t -> d
f4,f5 :: t -> e
f5,f6 :: t -> f
f6,f7 :: t -> g
f7,f8 :: t -> h
f8,f9 :: t -> i
f9) $$$$$$$$$ :: (t -> a, t -> b, t -> c, t -> d, t -> e, t -> f, t -> g, t -> h,
 t -> i)
-> (t, t, t, t, t, t, t, t, t) -> (a, b, c, d, e, f, g, h, i)
$$$$$$$$$ (a1 :: t
a1,a2 :: t
a2,a3 :: t
a3,a4 :: t
a4,a5 :: t
a5,a6 :: t
a6,a7 :: t
a7,a8 :: t
a8,a9 :: t
a9) = (t -> a
f1 t
a1, t -> b
f2 t
a2, t -> c
f3 t
a3, t -> d
f4 t
a4, t -> e
f5 t
a5, t -> f
f6 t
a6, t -> g
f7 t
a7, t -> h
f8 t
a8, t -> i
f9 t
a9)