h&A0      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                                                                                                                                     Safe-Inferred/258?#Z monoidal-functors A bifunctor ?\_ \otimes\_ \ : \mathcal{C} \times \mathcal{C} \to \mathcal{C} is  if it has a product operation %B_{x,y} : x \otimes y \to y \otimes x such that ,B_{x,y} \circ B_{x,y} \equiv 1_{x \otimes y}, which we call .Laws    D  monoidal-functorsswap is a symmetry isomorphism for tExamples:t swap @(->) @(,)#swap @(->) @(,) :: (a, b) -> (b, a)swap @(->) @(,) (True, "hello")("hello",True)!:t swap @(->) @Either (Left True)/swap @(->) @Either (Left True) :: Either b Boolswap @(->) @Either (Left True) Right Truemonoidal-functors A bifunctor ?\_ \otimes\_ \ : \mathcal{C} \times \mathcal{C} \to \mathcal{C} that maps out of the  .https://ncatlab.org/nlab/show/product+categoryproduct category \mathcal{C} \times \mathcal{C} is a  if it has: a corresponding identity type ILeft and right  ;https://ncatlab.org/nlab/show/unitor#in_monoidal_categoriesunitor operations \lambda_{x} : 1 \otimes x \to x and \rho_{x} : x \otimes 1 \to x, which we call  and .Laws    (a E i) D a    a D (a E i)    (i E a) D a    a D (i E a) monoidal-functorsThe  1https://ncatlab.org/nlab/show/natural+isomorphismnatural isomorphism between  (i `t` a) and a.Examplesfwd (unitl @_ @(,)) ((), True)Truebwd (unitl @_ @(,)) True ((),True)bwd (unitl @_ @Either) True Right True:t bwd (unitl @_ @Either) True/bwd (unitl @_ @Either) True :: Either Void Boolmonoidal-functorsThe  1https://ncatlab.org/nlab/show/natural+isomorphismnatural isomorphism between  (a `t` i) and a.Examplesfwd (unitr @_ @(,)) (True, ())Truebwd (unitr @_ @(,)) True (True,())bwd (unitr @_ @Either) True Left True:t bwd (unitr @_ @Either) True/bwd (unitr @_ @Either) True :: Either Bool Voidmonoidal-functors A bifunctor ;\_\otimes\_: \mathcal{C} \times \mathcal{C} \to \mathcal{C} is  if it is equipped with a  1https://ncatlab.org/nlab/show/natural+isomorphismnatural isomorphism of the form \alpha_{x,y,z} : (x \otimes (y \otimes z)) \to ((x \otimes y) \otimes z), which we call .Laws        D         D  monoidal-functorsThe  1https://ncatlab.org/nlab/show/natural+isomorphismnatural isomorphism0 between left and right associated nestings of t.Examples:t assoc @(->) @(,)4assoc @(->) @(,) :: Iso (->) (a, (b, c)) ((a, b), c)+fwd (assoc @(->) @(,)) (1, ("hello", True))((1,"hello"),True)monoidal-functors A Bifunctor t is a 1 whose domain is the product of two categories.  is equivalent to the ordinary  # class but we replace the implicit (->) . with three distinct higher kinded variables cat1, cat2, and cat3. allowing the user to pickout a functor from cat_1 \times cat_2 to cat_3.Laws    D    D    D   (f  g) (h  i) D  f h   g i  (f  g) D  f   g  (f  g) D  f   g monoidal-functors$Covariantly map over both variables.  f g D  f   gExamples3gbimap @(->) @(->) @(->) @(,) show not (123, False) ("123",True)7gbimap @(->) @(->) @(->) @Either show not (Right False) Right TruegetOp (gbimap @Op @Op @Op @Either (Op (+ 1)) (Op show)) (Right True) Right "True" monoidal-functorsAn invertible mapping between a and b in category cat.Laws      D       D  monoidal-functorsInfix operator for .monoidal-functors*Covariantally map over the right variable.monoidal-functors)Covariantally map over the left variable.    9  Safe-Inferred/258?2$monoidal-functorsA Category equipped with a  t where the  unit i is the  ,https://ncatlab.org/nlab/show/initial+objectinitial object in cat and thus every object a is equipped with a morphism e^{-1}_x: I \to x, which we call %.Laws /   %     D  /   %     D  %monoidal-functors#A morphism from the initial object i in cat to a.Examples&monoidal-functorsThe left inclusion for t.Examples'monoidal-functorsThe right inclusion for t.Examples(monoidal-functorsGiven the universal map cat (x t y) a, construct morphisms cat x a and cat y a.Examples)monoidal-functorsA Category equipped with a  t where the  unit i is the  -https://ncatlab.org/nlab/show/terminal+objectterminal object in cat and thus every object a is equipped with a morphism  e_x: x \to I, which we call *.Laws      *  2 D       *  2 D  *monoidal-functorsA morphism from the a to the terminal object i in @cat. We can think of * as deleting data where 2 duplicates it.Exampleskill @(->) @(,) @() True()+monoidal-functorsThe left projection for t.Examples projl @(->) @(,) (True, "hello")True,monoidal-functorsThe right projection for t.Examples projr @(->) @(,) (True, "hello")"hello"-monoidal-functorsGiven the universal map  cat a (x t y), construct morphisms cat a x and cat a y.Examples.monoidal-functorsA Category is . if it is equipped with a  type operator t1 and each object comes equipped with a morphism  \Delta^{-1}_x: x \otimes x \to x, which we call /.Laws /   / D / .  /     /   / D / .  /     /monoidal-functorsThe  (https://ncatlab.org/nlab/show/codiagonalco-diagonal morphism of a in cat.Examples$:t merge @(->) @(Either) (Left True))merge @(->) @(Either) (Left True) :: Bool!merge @(->) @(Either) (Left True)True0monoidal-functorsGiven morphisms cat x a and cat y a, construct the universal map cat (x `t` y) a.Examples1monoidal-functorsA Category is 1 if it is equipped with a  bifunctor t( and each object comes equipped with a  /https://ncatlab.org/nlab/show/diagonal+morphismdiagonal morphism \Delta_x: x \to x \otimes x , which we call 2.Laws  2  2 D      2  2  2  2 D      2  2 2monoidal-functorsThe  /https://ncatlab.org/nlab/show/diagonal+morphismdiagonal morphism of a in cat. We can think of 2 as duplicating data.Examplessplit @(->) @(,) True (True,True)3monoidal-functorsGiven morphisms cat a x and cat a y, construct the universal map cat a (x `t` y).Examples:t fork @(->) @(,) show not2fork @(->) @(,) show not :: Bool -> (String, Bool)fork @(->) @(,) show not True("True",False)4monoidal-functorsInfix version of 3.5monoidal-functorsInfix version of 0.$%&'()*+,-./0123451234./05)*+,-$%&'(49 59  Safe-Inferred)*/01258?4ZDmonoidal-functors Examples::{( let foo :: Tensored (,) () '[Bool, Int]# foo = Tensored (True, (8, ())):}:{,let bar :: Tensored Either Void '[Bool, Int]# bar = Tensored $ Right $ Left 8:}:{+let baz :: Tensored These Void '[Bool, Int]( baz = Tensored $ These True $ This 8:}>?@ABCDDABC@>? Safe-Inferred/258?:(monoidal-functorsBoilerplate newtype to derive L for any .monoidal-functorsBoilerplate newtype to derive L for any .monoidal-functorsBoilerplate newtype to derive L for any .Lmonoidal-functorsA bifunctor is L2 if it is parametric in both its type parameters.Laws M     D  M g2 g2' f2 f2'   g1 g1' f1 f1' D  (g2  g1) (g1'  g2') (f2  f1) (f1'  f2') Mmonoidal-functors0Used to apply a pair of isomorphic functions to p a b. Biinvmap9 picks out the appropriate half of the iso depending if p1 is covariant or contravariant on each parameter.Examples3:t biinvmap @(,) (read @Int) show (read @Bool) showbiinvmap @(,) (read @Int) show (read @Bool) show :: (Int, Bool) -> (String, String);biinvmap @(,) (read @Int) show (read @Bool) show (10, True) ("10","True")4:t biinvmap @(->) (read @Int) show (read @Bool) showbiinvmap @(->) (read @Int) show (read @Bool) show :: (Int -> Bool) -> String -> Stringbiinvmap @(->) (read @Int) show (read @Bool) show (\i -> i > 10) "12""True"Nmonoidal-functors$BiInvariant witnesses an IsomorphismJKLMNLMNKJ Safe-Inferred/258?I monoidal-functorsA  equipped with both a Tambara  and Tambara  is a .Laws  D       D      monoidal-functorsA  /P : \mathcal{C}^{op} \times \mathcal{D} \to Set is a Tambara # if it is equipped with a morphism 5s^{-1}_{a,b,m} : P(m \odot a, m \odot a) \to P(a, b) , which we call .Laws   D        ( f) D    ( f)    D    ( ) ( ) monoidal-functorsExamples::t rcostrength @(->) @(,) @(,)rcostrength @(->) @(,) @(,) :: RightCoModule (->) (,) (,) f => f (x, a) (x, b) -> f a b !:$:t rcostrength @(->) @Either @Eitherrcostrength @(->) @Either @Either :: RightCoModule (->) Either Either f => f (Either x a) (Either x b) -> f a bmonoidal-functorsA  /P : \mathcal{C}^{op} \times \mathcal{D} \to Set is a Tambara # if it is equipped with a morphism 5s^{-1}_{a,b,m} : P(a \odot m, a \odot m) \to P(a, b) , which we call .Laws  " D    "    ( f) D    ( f)    D    ( ) ( ) monoidal-functorsExamples#::t lcostrength @(->) @(,) @(,)lcostrength @(->) @(,) @(,) :: LeftCoModule (->) (,) (,) f => f (a, x) (b, x) -> f a b $:$:t lcostrength @(->) @Either @Eitherlcostrength @(->) @Either @Either :: LeftCoModule (->) Either Either f => f (Either a x) (Either b x) -> f a bmonoidal-functorsA  equipped with both a Tambara  and Tambara  is a .Laws  D       D      monoidal-functorsA  /P : \mathcal{C}^{op} \times \mathcal{D} \to Set is a Tambara # if it is equipped with a morphism /s_{a,b,m} : P(a, b) \to P(m \odot a, m \odot b), which we call .Laws  % D  %    ( f)   D  ( f)      D  ( ) ( )   monoidal-functorsExamples&::t rstrength @(->) @(,) @(,)rstrength @(->) @(,) @(,) :: RightModule (->) (,) (,) f => f a b -> f (x, a) (x, b) ':":t rstrength @(->) @Either @Eitherrstrength @(->) @Either @Either :: RightModule (->) Either Either f => f a b -> f (Either x a) (Either x b)monoidal-functorsA  /P : \mathcal{C}^{op} \times \mathcal{D} \to Set is a Tambara # if it is equipped with a morphism /s_{a,b,m} : P(a, b) \to P(a \odot m, b \odot m), which we call .Laws ( ) D ( )    ( f)   D  ( f)      D ( ( ) ( )   monoidal-functorsExamples*+::t lstrength @(->) @(,) @(,)lstrength @(->) @(,) @(,) :: LeftModule (->) (,) (,) p => p a b -> p (a, x) (b, x),-:":t lstrength @(->) @Either @Eitherlstrength @(->) @Either @Either :: LeftModule (->) Either Either p => p a b -> p (Either a x) (Either b x)monoidal-functors.Boilerplate newtype to derive modules for any .monoidal-functors.Boilerplate newtype to derive modules for any .   Safe-Inferred/258?[monoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}). A bifunctor 6F : \mathcal{C_1} \times \mathcal{C_2} \to \mathcal{D} is  if it maps between "\mathcal{C_1} \times \mathcal{C_2} and  \mathcal{D} while preserving their monoidal structure. Eg., a homomorphism of monoidal categories.See  .https://ncatlab.org/nlab/show/monoidal+functorNCatlab for more details.LawsRight Unitality: \require{AMScd} \begin{CD} F A B \bullet I_{\mathcal{D}} @>{1 \bullet \phi}>> F A B \bullet F I_{\mathcal{C_{1}}} I_{\mathcal{C_{2}}}\\ @VV{\rho_{\mathcal{D}}}V @VV{\phi AB,I_{\mathcal{C_{1}}}I_{\mathcal{C_{2}}}}V \\ F A B @<<{F \rho_{\mathcal{C_{1}}} \rho_{\mathcal{C_{2}}}}< F (A \otimes I_{\mathcal{C_{1}}}) (B \otimes I_{\mathcal{C_{2}}}) \end{CD}      D         Left Unitality: \begin{CD} I_{\mathcal{D}} \bullet F A B @>{\phi \bullet 1}>> F I_{\mathcal{C_{1}}} I_{\mathcal{C_{2}}} \bullet F A B\\ @VV{\lambda_{\mathcal{D}}}V @VV{I_{\mathcal{C_{1}}}I_{\mathcal{C_{2}}},\phi AB}V \\ F A B @<<{F \lambda_{\mathcal{C_{1}}} \lambda_{\mathcal{C_{2}}}}< F (I_{\mathcal{C_{1}}} \otimes A) (I_{\mathcal{C_{2}}} \otimes B) \end{CD}     D  (  )     monoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}). A bifunctor 6F : \mathcal{C_1} \times \mathcal{C_2} \to \mathcal{D} is  if it supports a morphism \phi : I_{\mathcal{D}} \to F\ I_{\mathcal{C_1}}\ I_{\mathcal{C_2}}, which we call .monoidal-functors introduce maps from the identity in "\mathcal{C_1} \times \mathcal{C_2} to the identity in  \mathcal{D}.Examples#introduce @(->) @() @() @() @(,) ()((),())(:t introduce @(->) @Void @() @() @Either=introduce @(->) @Void @() @() @Either :: () -> Either Void ()(introduce @(->) @Void @() @() @Either ()Right ()monoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}). A bifunctor 6F : \mathcal{C_1} \times \mathcal{C_2} \to \mathcal{D} is * if it supports a natural transformation \phi_{AB,CD} : F\ A\ B \bullet F\ C\ D \to F\ (A \otimes C)\ (B \otimes D), which we call .LawsAssociativity: \require{AMScd} \begin{CD} (F A B \bullet F C D) \bullet F X Y @>>{\alpha_{\mathcal{D}}}> F A B \bullet (F C D \bullet F X Y) \\ @VV{\phi_{AB,CD} \bullet 1}V @VV{1 \bullet \phi_{CD,FY}}V \\ F (A \otimes C) (B \otimes D) \bullet F X Y @. F A B \bullet (F (C \otimes X) (D \otimes Y) \\ @VV{\phi_{(A \otimes C)(B \otimes D),XY}}V @VV{\phi_{AB,(C \otimes X)(D \otimes Y)}}V \\ F ((A \otimes C) \otimes X) ((B \otimes D) \otimes Y) @>>{F \alpha_{\mathcal{C_1}}} \alpha_{\mathcal{C_2}}> F (A \otimes (C \otimes X)) (B \otimes (D \otimes Y)) \\ \end{CD}         D  (  )      monoidal-functorsA natural transformation \phi_{AB,CD} : F\ A\ B \bullet F\ C\ D \to F\ (A \otimes C)\ (B \otimes D). Examples$:t combine @(->) @(,) @(,) @(,) @(,)combine @(->) @(,) @(,) @(,) @(,) :: ((x, y), (x', y')) -> ((x, x'), (y, y'))combine @(->) @(,) @(,) @(,) @(,) ((True, "Hello"), ((), "World"))((True,()),("Hello","World"));combine @(->) @(,) @(,) @(,) @(->) (show, (>10)) (True, 11) ("True",True) Safe-Inferred/258?_monoidal-functorsSplit the input between the two argument arrows and multiply their outputs.monoidal-functorsInfix operator for .monoidal-functorsSplit the input between the two argument arrows and sum their outputs.monoidal-functorsInfix operator for .monoidal-functorsSend the whole input to the two argument arrows and multiply their outputs.monoidal-functorsInfix operator for .monoidal-functorsSplit the input between the two argument arrows and merge their outputs.monoidal-functorsInfix operator for .monoidal-functorsSplit the input between the two argument arrows and and sum their outputs.monoidal-functorsInfix operator for .monoidal-functorsSend the whole input to the two argument arrows and sum their outputs.monoidal-functorsSplit the input between the two argument arrows then merge their outputs.monoidal-functorsSplit the input between the two argument arrows then multiply their outputs.monoidal-functorsInfix operator for .%%323255 Safe-Inferred/258 Identity Bool4invmap @Identity (read @Bool) show (Identity "True") Identity Truemonoidal-functorsEvery  is also an  functor.  Safe-Inferred/258?fmonoidal-functorsExamples::t rstrength @(->) @(,) @Predicate (Predicate @Int (> 10))rstrength @(->) @(,) @Predicate (Predicate @Int (> 10)) :: Predicate (x, Int):t rstrength @(->) @Either @[]2rstrength @(->) @Either @[] :: [a] -> [Either x a])rstrength @(->) @Either @[] [True, False][Right True,Right False]monoidal-functorsExamples::t lstrength @(->) @(,) @Predicate (Predicate @Int (> 10))lstrength @(->) @(,) @Predicate (Predicate @Int (> 10)) :: Predicate (Int, x):t lstrength @(->) @Either @[]0lstrength @(->) @Either @[] :: a -> [Either a x])lstrength @(->) @Either @[] [True, False][Left True,Left False]  Safe-Inferred/258?tHmonoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}) . A functor F : \mathcal{C} \to \mathcal{D} is  if it maps between  \mathcal{C} and  \mathcal{D} while preserving their monoidal structure. Eg., a homomorphism of monoidal categories.See  .https://ncatlab.org/nlab/show/monoidal+functorNCatlab for more details.LawsRight Unitality: \require{AMScd} \begin{CD} F A \bullet I_{\mathcal{D}} @>{1 \bullet \phi}>> F A \bullet F I_{\mathcal{C}};\\ @VV{\rho_{\mathcal{D}}}V @VV{\phi A,I_{\mathcal{C}}}V \\ F A @<<{F \rho_{\mathcal{C}}}< F (A \otimes I_{\mathcal{C}}); \end{CD}       D         Left Unitality: \begin{CD} I_{\mathcal{D}} \bullet F B @>{\phi \bullet 1}>> F I_{\mathcal{C}} \bullet F B;\\ @VV{\lambda_{\mathcal{D}}}V @VV{\phi I_{\mathcal{C}},B}V \\ F A @<<{F \lambda_{\mathcal{C}}}< F (A \otimes I_{\mathcal{C}} \otimes B); \end{CD}      D  (  )     monoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}) . A functor F : \mathcal{C} \to \mathcal{D} is  if it supports a morphism -\phi : I_{\mathcal{D}} \to F\ I_{\mathcal{C}}, which we call .monoidal-functors introduce maps from the identity in  \mathcal{C} to the identity in  \mathcal{D}.Examples!introduce @(->) @() @() @Maybe ()Just ()#:t introduce @(->) @Void @() @Maybe4introduce @(->) @Void @() @Maybe :: () -> Maybe Void#introduce @(->) @Void @() @Maybe ()Nothingmonoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}) . A functor F : \mathcal{C} \to \mathcal{D} is * if it supports a natural transformation 3\phi_{A,B} : F\ A \bullet F\ B \to F\ (A \otimes B), which we call .LawsAssociativity: \require{AMScd} \begin{CD} (F A \bullet F B) \bullet F C @>>{\alpha_{\mathcal{D}}}> F A \bullet (F B \bullet F C) \\ @VV{\phi_{A,B} \bullet 1}V @VV{1 \bullet \phi_{B,C}}V \\ F (A \otimes B) \bullet F C @. F A \bullet (F (B \otimes C)) \\ @VV{\phi_{A \otimes B,C}}V @VV{\phi_{A,B \otimes C}}V \\ F ((A \otimes B) \otimes C) @>>{F \alpha_{\mathcal{C}}}> F (A \otimes (B \otimes C)) \\ \end{CD}         D  (  )      monoidal-functorscombine+ is a natural transformation from functors \mathcal{C}  \mathcal{C} to  \mathcal{D}.Examples8combine @(->) @(,) @(,) @Maybe (Just True, Just "hello")Just (True,"hello")3combine @(->) @(,) @(,) @Maybe (Just True, Nothing)Nothing6combine @(->) @Either @(,) @Maybe (Just True, Nothing)Just (Left True)9combine @(->) @Either @(,) @Maybe (Nothing, Just "hello")Just (Right "hello")  Safe-Inferred/258?t  Safe-Inferred/258?monoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}). A bifunctor F : \mathcal{C_1} \times \mathcal{C_2} \times \mathcal{C_3} \to \mathcal{D} is  if it maps between 8\mathcal{C_1} \times \mathcal{C_2}\ \times \mathcal{C_3} and  \mathcal{D} while preserving their monoidal structure. Eg., a homomorphism of monoidal categories.See  .https://ncatlab.org/nlab/show/monoidal+functorNCatlab for more details.LawsRight Unitality: \require{AMScd} \begin{CD} F A B C \bullet I_{\mathcal{D}} @>{1 \bullet \phi}>> F A B \bullet F I_{\mathcal{C_{1}}} I_{\mathcal{C_{2}}} I_{\mathcal{C_{3}}}\\ @VV{\rho_{\mathcal{D}}}V @VV{\phi ABC,I_{\mathcal{C_{1}}}I_{\mathcal{C_{2}}}I_{\mathcal{C_{3}}}}V \\ F A B C @<<{F \rho_{\mathcal{C_{1}}} \rho_{\mathcal{C_{2}}} \rho_{\mathcal{C_{3}}}}< F (A \otimes I_{\mathcal{C_{1}}}) (B \otimes I_{\mathcal{C_{2}}}) (C \otimes I_{\mathcal{C_{3}}}) \end{CD}      D  .   .  Left Unitality: \begin{CD} I_{\mathcal{D}} \bullet F A B C @>{\phi \bullet 1}>> F I_{\mathcal{C_{1}}} I_{\mathcal{C_{2}}} \bullet F A B C\\ @VV{\lambda_{\mathcal{D}}}V @VV{I_{\mathcal{C_{1}}}I_{\mathcal{C_{2}}}I_{\mathcal{C_{3}}},\phi ABC}V \\ F A B C @<<{F \lambda_{\mathcal{C_{1}}} \lambda_{\mathcal{C_{2}}} \lambda_{\mathcal{C_{3}}}}< F (I_{\mathcal{C_{1}}} \otimes A) (I_{\mathcal{C_{2}}} \otimes B) (I_{\mathcal{C_{3}}} \otimes C) \end{CD}     D /0 ( 1)   1 monoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}). A bifunctor F : \mathcal{C_1} \times \mathcal{C_2} \times \mathcal{C_3} \to \mathcal{D} is  if it supports a morphism \phi : I_{\mathcal{D}} \to F\ I_{\mathcal{C_1}}\ I_{\mathcal{C_2}}\ I_{\mathcal{C_3}}, which we call .monoidal-functors introduce maps from the identity in 7\mathcal{C_1} \times \mathcal{C_2} \times \mathcal{C_3} to the identity in  \mathcal{D}.monoidal-functorsGiven monoidal categories '(\mathcal{C}, \otimes, I_{\mathcal{C}}) and '(\mathcal{D}, \bullet, I_{\mathcal{D}}). A bifunctor F : \mathcal{C_1} \times \mathcal{C_2} \times \mathcal{C_3} \to \mathcal{D} is * if it supports a natural transformation \phi_{ABC,XYZ} : F\ A\ B\ C \bullet F\ X\ Y\ Z \to F\ (A \otimes X)\ (B \otimes Y)\ (C \otimes Z), which we call .LawsAssociativity: \require{AMScd} \begin{CD} (F A B C \bullet F X Y Z) \bullet F P Q R @>>{\alpha_{\mathcal{D}}}> F A B C \bullet (F X Y Z \bullet F P Q R) \\ @VV{\phi_{ABC,XYZ} \bullet 1}V @VV{1 \bullet \phi_{XYZ,PQR}}V \\ F (A \otimes X) (B \otimes Y) (C \otimes Z) \bullet F P Q R @. F A B C \bullet (F (X \otimes P) (Y \otimes Q) (Z \otimes R) \\ @VV{\phi_{(A \otimes X)(B \otimes Y)(C \otimes Z),PQR}}V @VV{\phi_{ABC,(X \otimes P)(Y \otimes Q)(Z \otimes R)}}V \\ F ((A \otimes X) \otimes P) ((B \otimes Y) \otimes Q) ((C \otimes Z) \otimes R) @>>{F \alpha_{\mathcal{C_1}}} \alpha_{\mathcal{C_2}}\alpha_{\mathcal{C_3}}> F (A \otimes (X \otimes P)) (B \otimes (Y \otimes Q)) (C \otimes (Z \otimes R)) \\ \end{CD}    2    D /0 ( )      monoidal-functorsA natural transformation \phi_{ABC,XYZ} : F\ A\ B\ C \bullet F\ X\ Y\ Z \to F\ (A \otimes X)\ (B \otimes Y) (C \otimes Z). 341.567889:;<=>?@ABCDEFGHIJKLMNO"PQR)%STUVWXYZ[\]^_`abcdefgghijklmnopqrstuvwxyz{|}~2                     w v                                                                                                                                                                                                                                            2                  2 00monoidal-functors-0.2.0.0-6pQ7FEBxrkeFSAogg7A3YXControl.Category.TensorControl.Category.CartesianControl.Category.Tensor.ExprData.Bifunctor.BiInvariantData.Bifunctor.ModuleData.Bifunctor.Monoidal#Data.Bifunctor.Monoidal.SpecializedData.Functor.InvariantData.Functor.ModuleData.Functor.MonoidalData.Trifunctor.ModuleData.Trifunctor.MonoidalData.Bifunctor BifunctorglmapgrmapassocControl.Category.invmapData.Profunctor.Typesdimapswap+Data.Profunctor.Types.Data.Profunctor.TypeslmapinclrrmapbwdfwdData.Profunctor.StrongunsecondData.Profunctor.Choiceunrightincllunfirstunleftprojrsecond'right'TypesprojlData.Profiunctor.Strongfirst'Data.Profiunctor.Choiceleft'unitr Data.Functorfmapunitlcombine SymmetricTensor Associative GBifunctorgbimapIso#$fCategoryTYPEIso$fGBifunctorIsoIsoIsot$fGBifunctorStarStarStarThese$fGBifunctorFUNFUNFUNt$fGBifunctorOpOpOpt$fAssociativeStart$fAssociativeFUNThese$fAssociativeFUNEither$fAssociativeFUN(,)$fAssociativeOpt$fTensorStarti$fTensorFUNTheseVoid$fTensorFUNEitherVoid$fTensorFUN(,)() $fTensorOpti$fSymmetricStart$fSymmetricFUNThese$fSymmetricFUNEither$fSymmetricFUN(,)$fSymmetricOpt Cocartesianspawnunfuse CartesiankillunforkSemicocartesianmergefuse Semicartesiansplitfork/\\/$fSemicartesianFUN(,)$fSemicocartesianOpt$fSemicocartesianFUNEither$fSemicartesianOpt$fCartesianFUN(,)()$fCocartesianFUNEitherVoid$fCocartesianOpti$fCartesianOptiAppendTensoredappendTensored++Tensored getTensoredMConcat$fAppendTensored:$fAppendTensored[] $fOrdTensored $fEqTensored$fShowTensored Coercible2 Coercible1 BiInvariantbiinvmapbiinvIso$fBiInvariantFromProfunctor$fBiInvariantFromBifunctor$fContravariantFromContra$fFunctorFromFunctor$fBiInvariantWrappedBifunctor$fBiInvariantThese$fBiInvariantTannen$fBiInvariantSum$fBiInvariantProduct$fBiInvariantK1$fBiInvariantJoker$fBiInvariantFlip$fBiInvariantEither$fBiInvariantConst$fBiInvariantClown$fBiInvariantBiff$fBiInvariantBiap$fBiInvariantArg$fBiInvariant(,)$fBiInvariant(,,,,,,)$fBiInvariant(,,,,,)$fBiInvariant(,,,,)$fBiInvariant(,,,)$fBiInvariant(,,)$fBiInvariantYoneda$fBiInvariantWrappedArrow$fBiInvariantTannen0$fBiInvariantTambaraSum$fBiInvariantTambara$fBiInvariantTagged$fBiInvariantSum0$fBiInvariantStar$fBiInvariantRift$fBiInvariantRan$fBiInvariantProduct0$fBiInvariantProcompose$fBiInvariantPastroSum$fBiInvariantPastro$fBiInvariantKleisli$fBiInvariantJoker0$fBiInvariantFreeTraversing$fBiInvariantFreeMapping$fBiInvariantForget$fBiInvariantEnvironment$fBiInvariantCoyoneda$fBiInvariantCotambaraSum$fBiInvariantCotambara$fBiInvariantCostar$fBiInvariantCopastroSum$fBiInvariantCopastro$fBiInvariantCokleisli$fBiInvariantCofreeTraversing$fBiInvariantCofreeMapping$fBiInvariantCodensity$fBiInvariantClown0$fBiInvariantClosure$fBiInvariantCayley$fBiInvariantBiff0$fBiInvariantFUN CoBimodule RightCoModule rcostrength LeftCoModule lcostrengthBimodule RightModule rstrength LeftModule lstrength!$fLeftModuleOp(,)(,)FromBifunctor&$fLeftModuleFUNTheseTheseFromBifunctor($fLeftModuleFUNEitherEitherFromBifunctor)$fLeftModuleFUNEitherEitherFromProfunctor#$fLeftModuleFUN(,)(,)FromProfunctor"$fRightModuleOp(,)(,)FromBifunctor'$fRightModuleFUNTheseTheseFromBifunctor)$fRightModuleFUNEitherEitherFromBifunctor*$fRightModuleFUNEitherEitherFromProfunctor$$fRightModuleFUN(,)(,)FromProfunctor$fBimoduleOp(,)(,)FromBifunctor$$fBimoduleFUNTheseTheseFromBifunctor&$fBimoduleFUNEitherEitherFromBifunctor'$fBimoduleFUNEitherEitherFromProfunctor!$fBimoduleFUN(,)(,)FromProfunctor'$fLeftCoModuleOpTheseTheseFromBifunctor)$fLeftCoModuleOpEitherEitherFromBifunctor$$fLeftCoModuleFUN(,)(,)FromBifunctor+$fLeftCoModuleFUNEitherEitherFromProfunctor%$fLeftCoModuleFUN(,)(,)FromProfunctor($fRightCoModuleOpTheseTheseFromBifunctor*$fRightCoModuleOpEitherEitherFromBifunctor%$fRightCoModuleFUN(,)(,)FromBifunctor,$fRightCoModuleFUNEitherEitherFromProfunctor&$fRightCoModuleFUN(,)(,)FromProfunctor%$fCoBimoduleOpTheseTheseFromBifunctor'$fCoBimoduleOpEitherEitherFromBifunctor"$fCoBimoduleFUN(,)(,)FromBifunctor)$fCoBimoduleFUNEitherEitherFromProfunctor#$fCoBimoduleFUN(,)(,)FromProfunctor$fFunctorFromBifunctor$fBifunctorFromBifunctor$fFunctorFromProfunctor$fProfunctorFromProfunctor$fStrongFromProfunctor$fChoiceFromProfunctor$fCostrongFromProfunctor$fCochoiceFromProfunctor $fCoBimoduleOpTheseThese(,,,,,,)$fCoBimoduleOpTheseThese(,,,,,)$fCoBimoduleOpTheseThese(,,,,)$fCoBimoduleOpTheseThese(,,,)$fCoBimoduleOpTheseThese(,,)$fCoBimoduleOpTheseThese(,)$fCoBimoduleOpTheseTheseK1$fCoBimoduleOpTheseTheseThese$fCoBimoduleOpTheseTheseEither$fCoBimoduleOpTheseTheseConst$fCoBimoduleOpTheseTheseArg"$fCoBimoduleOpEitherEither(,,,,,,)!$fCoBimoduleOpEitherEither(,,,,,) $fCoBimoduleOpEitherEither(,,,,)$fCoBimoduleOpEitherEither(,,,)$fCoBimoduleOpEitherEither(,,)$fCoBimoduleOpEitherEither(,)$fCoBimoduleOpEitherEitherK1$fCoBimoduleOpEitherEitherThese $fCoBimoduleOpEitherEitherEither$fCoBimoduleOpEitherEitherConst$fCoBimoduleOpEitherEitherArg$fCoBimoduleFUN(,)(,)(,,,,,,)$fCoBimoduleFUN(,)(,)(,,,,,)$fCoBimoduleFUN(,)(,)(,,,,)$fCoBimoduleFUN(,)(,)(,,,)$fCoBimoduleFUN(,)(,)(,,)$fCoBimoduleFUN(,)(,)(,)$fCoBimoduleFUN(,)(,)K1$fCoBimoduleFUN(,)(,)These$fCoBimoduleFUN(,)(,)Either$fCoBimoduleFUN(,)(,)Const$fCoBimoduleFUN(,)(,)Arg!$fCoBimoduleFUNEitherEitherCayley!$fCoBimoduleFUNEitherEitherTannen"$fCoBimoduleFUNEitherEitherProduct$fCoBimoduleFUNEitherEitherSum$fCoBimoduleFUNEitherEitherStar!$fCoBimoduleFUNEitherEitherCostar!$fCoBimoduleFUNEitherEitherForget$fCoBimoduleFUNEitherEitherFUN!$fCoBimoduleFUNEitherEitherYoneda#$fCoBimoduleFUNEitherEitherCoyoneda'$fCoBimoduleFUNEitherEitherCotambaraSum&$fCoBimoduleFUNEitherEitherCopastroSum$fCoBimoduleFUN(,)(,)Cayley$fCoBimoduleFUN(,)(,)Procompose$fCoBimoduleFUN(,)(,)Tannen$fCoBimoduleFUN(,)(,)Product$fCoBimoduleFUN(,)(,)Sum!$fCoBimoduleFUN(,)(,)WrappedArrow$fCoBimoduleFUN(,)(,)Costar$fCoBimoduleFUN(,)(,)Cokleisli$fCoBimoduleFUN(,)(,)FUN$fCoBimoduleFUN(,)(,)Yoneda$fCoBimoduleFUN(,)(,)Copastro$fCoBimoduleFUN(,)(,)Coyoneda$fCoBimoduleFUN(,)(,)Tagged$fCoBimoduleFUN(,)(,)Kleisli#$fRightCoModuleOpTheseThese(,,,,,,)"$fRightCoModuleOpTheseThese(,,,,,)!$fRightCoModuleOpTheseThese(,,,,) $fRightCoModuleOpTheseThese(,,,)$fRightCoModuleOpTheseThese(,,)$fRightCoModuleOpTheseThese(,)$fRightCoModuleOpTheseTheseK1 $fRightCoModuleOpTheseTheseThese!$fRightCoModuleOpTheseTheseEither $fRightCoModuleOpTheseTheseConst$fRightCoModuleOpTheseTheseArg%$fRightCoModuleOpEitherEither(,,,,,,)$$fRightCoModuleOpEitherEither(,,,,,)#$fRightCoModuleOpEitherEither(,,,,)"$fRightCoModuleOpEitherEither(,,,)!$fRightCoModuleOpEitherEither(,,) $fRightCoModuleOpEitherEither(,)$fRightCoModuleOpEitherEitherK1"$fRightCoModuleOpEitherEitherThese#$fRightCoModuleOpEitherEitherEither"$fRightCoModuleOpEitherEitherConst $fRightCoModuleOpEitherEitherArg $fRightCoModuleFUN(,)(,)(,,,,,,)$fRightCoModuleFUN(,)(,)(,,,,,)$fRightCoModuleFUN(,)(,)(,,,,)$fRightCoModuleFUN(,)(,)(,,,)$fRightCoModuleFUN(,)(,)(,,)$fRightCoModuleFUN(,)(,)(,)$fRightCoModuleFUN(,)(,)K1$fRightCoModuleFUN(,)(,)These$fRightCoModuleFUN(,)(,)Either$fRightCoModuleFUN(,)(,)Const$fRightCoModuleFUN(,)(,)Arg$$fRightCoModuleFUNEitherEitherCayley$$fRightCoModuleFUNEitherEitherTannen%$fRightCoModuleFUNEitherEitherProduct!$fRightCoModuleFUNEitherEitherSum"$fRightCoModuleFUNEitherEitherStar$$fRightCoModuleFUNEitherEitherCostar$$fRightCoModuleFUNEitherEitherForget!$fRightCoModuleFUNEitherEitherFUN$$fRightCoModuleFUNEitherEitherYoneda&$fRightCoModuleFUNEitherEitherCoyoneda*$fRightCoModuleFUNEitherEitherCotambaraSum)$fRightCoModuleFUNEitherEitherCopastroSum$fRightCoModuleFUN(,)(,)Cayley"$fRightCoModuleFUN(,)(,)Procompose$fRightCoModuleFUN(,)(,)Tannen$fRightCoModuleFUN(,)(,)Product$fRightCoModuleFUN(,)(,)Sum$$fRightCoModuleFUN(,)(,)WrappedArrow$fRightCoModuleFUN(,)(,)Costar!$fRightCoModuleFUN(,)(,)Cokleisli$fRightCoModuleFUN(,)(,)FUN$fRightCoModuleFUN(,)(,)Yoneda $fRightCoModuleFUN(,)(,)Copastro $fRightCoModuleFUN(,)(,)Coyoneda$fRightCoModuleFUN(,)(,)Tagged$fRightCoModuleFUN(,)(,)Kleisli"$fLeftCoModuleOpTheseThese(,,,,,,)!$fLeftCoModuleOpTheseThese(,,,,,) $fLeftCoModuleOpTheseThese(,,,,)$fLeftCoModuleOpTheseThese(,,,)$fLeftCoModuleOpTheseThese(,,)$fLeftCoModuleOpTheseThese(,)$fLeftCoModuleOpTheseTheseK1$fLeftCoModuleOpTheseTheseThese $fLeftCoModuleOpTheseTheseEither$fLeftCoModuleOpTheseTheseConst$fLeftCoModuleOpTheseTheseArg$$fLeftCoModuleOpEitherEither(,,,,,,)#$fLeftCoModuleOpEitherEither(,,,,,)"$fLeftCoModuleOpEitherEither(,,,,)!$fLeftCoModuleOpEitherEither(,,,) $fLeftCoModuleOpEitherEither(,,)$fLeftCoModuleOpEitherEither(,)$fLeftCoModuleOpEitherEitherK1!$fLeftCoModuleOpEitherEitherThese"$fLeftCoModuleOpEitherEitherEither!$fLeftCoModuleOpEitherEitherConst$fLeftCoModuleOpEitherEitherArg$fLeftCoModuleFUN(,)(,)(,,,,,,)$fLeftCoModuleFUN(,)(,)(,,,,,)$fLeftCoModuleFUN(,)(,)(,,,,)$fLeftCoModuleFUN(,)(,)(,,,)$fLeftCoModuleFUN(,)(,)(,,)$fLeftCoModuleFUN(,)(,)(,)$fLeftCoModuleFUN(,)(,)K1$fLeftCoModuleFUN(,)(,)These$fLeftCoModuleFUN(,)(,)Either$fLeftCoModuleFUN(,)(,)Const$fLeftCoModuleFUN(,)(,)Arg#$fLeftCoModuleFUNEitherEitherCayley#$fLeftCoModuleFUNEitherEitherTannen$$fLeftCoModuleFUNEitherEitherProduct $fLeftCoModuleFUNEitherEitherSum!$fLeftCoModuleFUNEitherEitherStar#$fLeftCoModuleFUNEitherEitherCostar#$fLeftCoModuleFUNEitherEitherForget $fLeftCoModuleFUNEitherEitherFUN#$fLeftCoModuleFUNEitherEitherYoneda%$fLeftCoModuleFUNEitherEitherCoyoneda)$fLeftCoModuleFUNEitherEitherCotambaraSum($fLeftCoModuleFUNEitherEitherCopastroSum$fLeftCoModuleFUN(,)(,)Cayley!$fLeftCoModuleFUN(,)(,)Procompose$fLeftCoModuleFUN(,)(,)Tannen$fLeftCoModuleFUN(,)(,)Product$fLeftCoModuleFUN(,)(,)Sum#$fLeftCoModuleFUN(,)(,)WrappedArrow$fLeftCoModuleFUN(,)(,)Costar $fLeftCoModuleFUN(,)(,)Cokleisli$fLeftCoModuleFUN(,)(,)FUN$fLeftCoModuleFUN(,)(,)Yoneda$fLeftCoModuleFUN(,)(,)Copastro$fLeftCoModuleFUN(,)(,)Coyoneda$fLeftCoModuleFUN(,)(,)Tagged$fLeftCoModuleFUN(,)(,)Kleisli$fBimoduleOp(,)(,)(,,,,,,)$fBimoduleOp(,)(,)(,,,,,)$fBimoduleOp(,)(,)(,,,,)$fBimoduleOp(,)(,)(,,,)$fBimoduleOp(,)(,)(,,)$fBimoduleOp(,)(,)(,)$fBimoduleOp(,)(,)K1$fBimoduleOp(,)(,)These$fBimoduleOp(,)(,)Either$fBimoduleOp(,)(,)Const$fBimoduleOp(,)(,)Arg$fBimoduleFUNTheseThese(,,,,,,)$fBimoduleFUNTheseThese(,,,,,)$fBimoduleFUNTheseThese(,,,,)$fBimoduleFUNTheseThese(,,,)$fBimoduleFUNTheseThese(,,)$fBimoduleFUNTheseThese(,)$fBimoduleFUNTheseTheseK1$fBimoduleFUNTheseTheseThese$fBimoduleFUNTheseTheseEither$fBimoduleFUNTheseTheseConst$fBimoduleFUNTheseTheseArg!$fBimoduleFUNEitherEither(,,,,,,) $fBimoduleFUNEitherEither(,,,,,)$fBimoduleFUNEitherEither(,,,,)$fBimoduleFUNEitherEither(,,,)$fBimoduleFUNEitherEither(,,)$fBimoduleFUNEitherEither(,)$fBimoduleFUNEitherEitherK1$fBimoduleFUNEitherEitherThese$fBimoduleFUNEitherEitherEither$fBimoduleFUNEitherEitherConst$fBimoduleFUNEitherEitherArg$fBimoduleFUNEitherEitherCayley#$fBimoduleFUNEitherEitherProcompose$fBimoduleFUNEitherEitherTannen $fBimoduleFUNEitherEitherProduct$fBimoduleFUNEitherEitherSum%$fBimoduleFUNEitherEitherWrappedArrow$fBimoduleFUNEitherEitherJoker$fBimoduleFUNEitherEitherStar$fBimoduleFUNEitherEitherForget"$fBimoduleFUNEitherEitherCokleisli$fBimoduleFUNEitherEitherFUN$fBimoduleFUNEitherEitherYoneda!$fBimoduleFUNEitherEitherCoyoneda&$fBimoduleFUNEitherEitherCofreeMapping$$fBimoduleFUNEitherEitherFreeMapping)$fBimoduleFUNEitherEitherCofreeTraversing'$fBimoduleFUNEitherEitherFreeTraversing#$fBimoduleFUNEitherEitherTambaraSum"$fBimoduleFUNEitherEitherPastroSum $fBimoduleFUNEitherEitherTambara$fBimoduleFUNEitherEitherTagged $fBimoduleFUNEitherEitherKleisli$fBimoduleFUN(,)(,)Cayley$fBimoduleFUN(,)(,)Procompose$fBimoduleFUN(,)(,)Tannen$fBimoduleFUN(,)(,)Product$fBimoduleFUN(,)(,)Sum$fBimoduleFUN(,)(,)WrappedArrow$fBimoduleFUN(,)(,)Clown$fBimoduleFUN(,)(,)Star$fBimoduleFUN(,)(,)Forget$fBimoduleFUN(,)(,)FUN$fBimoduleFUN(,)(,)Yoneda$fBimoduleFUN(,)(,)Coyoneda $fBimoduleFUN(,)(,)CofreeMapping$fBimoduleFUN(,)(,)FreeMapping#$fBimoduleFUN(,)(,)CofreeTraversing!$fBimoduleFUN(,)(,)FreeTraversing$fBimoduleFUN(,)(,)Closure$fBimoduleFUN(,)(,)Tambara$fBimoduleFUN(,)(,)Pastro$fBimoduleFUN(,)(,)Kleisli$fRightModuleOp(,)(,)(,,,,,,)$fRightModuleOp(,)(,)(,,,,,)$fRightModuleOp(,)(,)(,,,,)$fRightModuleOp(,)(,)(,,,)$fRightModuleOp(,)(,)(,,)$fRightModuleOp(,)(,)(,)$fRightModuleOp(,)(,)K1$fRightModuleOp(,)(,)These$fRightModuleOp(,)(,)Either$fRightModuleOp(,)(,)Const$fRightModuleOp(,)(,)Arg"$fRightModuleFUNTheseThese(,,,,,,)!$fRightModuleFUNTheseThese(,,,,,) $fRightModuleFUNTheseThese(,,,,)$fRightModuleFUNTheseThese(,,,)$fRightModuleFUNTheseThese(,,)$fRightModuleFUNTheseThese(,)$fRightModuleFUNTheseTheseK1$fRightModuleFUNTheseTheseThese $fRightModuleFUNTheseTheseEither$fRightModuleFUNTheseTheseConst$fRightModuleFUNTheseTheseArg$$fRightModuleFUNEitherEither(,,,,,,)#$fRightModuleFUNEitherEither(,,,,,)"$fRightModuleFUNEitherEither(,,,,)!$fRightModuleFUNEitherEither(,,,) $fRightModuleFUNEitherEither(,,)$fRightModuleFUNEitherEither(,)$fRightModuleFUNEitherEitherK1!$fRightModuleFUNEitherEitherThese"$fRightModuleFUNEitherEitherEither!$fRightModuleFUNEitherEitherConst$fRightModuleFUNEitherEitherArg"$fRightModuleFUNEitherEitherCayley&$fRightModuleFUNEitherEitherProcompose"$fRightModuleFUNEitherEitherTannen#$fRightModuleFUNEitherEitherProduct$fRightModuleFUNEitherEitherSum($fRightModuleFUNEitherEitherWrappedArrow!$fRightModuleFUNEitherEitherJoker $fRightModuleFUNEitherEitherStar"$fRightModuleFUNEitherEitherForget%$fRightModuleFUNEitherEitherCokleisli$fRightModuleFUNEitherEitherFUN"$fRightModuleFUNEitherEitherYoneda$$fRightModuleFUNEitherEitherCoyoneda)$fRightModuleFUNEitherEitherCofreeMapping'$fRightModuleFUNEitherEitherFreeMapping,$fRightModuleFUNEitherEitherCofreeTraversing*$fRightModuleFUNEitherEitherFreeTraversing&$fRightModuleFUNEitherEitherTambaraSum%$fRightModuleFUNEitherEitherPastroSum#$fRightModuleFUNEitherEitherTambara"$fRightModuleFUNEitherEitherTagged#$fRightModuleFUNEitherEitherKleisli$fRightModuleFUN(,)(,)Cayley $fRightModuleFUN(,)(,)Procompose$fRightModuleFUN(,)(,)Tannen$fRightModuleFUN(,)(,)Product$fRightModuleFUN(,)(,)Sum"$fRightModuleFUN(,)(,)WrappedArrow$fRightModuleFUN(,)(,)Clown$fRightModuleFUN(,)(,)Star$fRightModuleFUN(,)(,)Forget$fRightModuleFUN(,)(,)FUN$fRightModuleFUN(,)(,)Yoneda$fRightModuleFUN(,)(,)Coyoneda#$fRightModuleFUN(,)(,)CofreeMapping!$fRightModuleFUN(,)(,)FreeMapping&$fRightModuleFUN(,)(,)CofreeTraversing$$fRightModuleFUN(,)(,)FreeTraversing$fRightModuleFUN(,)(,)Closure$fRightModuleFUN(,)(,)Tambara$fRightModuleFUN(,)(,)Pastro$fRightModuleFUN(,)(,)Kleisli$fLeftModuleOp(,)(,)(,,,,,,)$fLeftModuleOp(,)(,)(,,,,,)$fLeftModuleOp(,)(,)(,,,,)$fLeftModuleOp(,)(,)(,,,)$fLeftModuleOp(,)(,)(,,)$fLeftModuleOp(,)(,)(,)$fLeftModuleOp(,)(,)K1$fLeftModuleOp(,)(,)These$fLeftModuleOp(,)(,)Either$fLeftModuleOp(,)(,)Const$fLeftModuleOp(,)(,)Arg!$fLeftModuleFUNTheseThese(,,,,,,) $fLeftModuleFUNTheseThese(,,,,,)$fLeftModuleFUNTheseThese(,,,,)$fLeftModuleFUNTheseThese(,,,)$fLeftModuleFUNTheseThese(,,)$fLeftModuleFUNTheseThese(,)$fLeftModuleFUNTheseTheseK1$fLeftModuleFUNTheseTheseThese$fLeftModuleFUNTheseTheseEither$fLeftModuleFUNTheseTheseConst$fLeftModuleFUNTheseTheseArg#$fLeftModuleFUNEitherEither(,,,,,,)"$fLeftModuleFUNEitherEither(,,,,,)!$fLeftModuleFUNEitherEither(,,,,) $fLeftModuleFUNEitherEither(,,,)$fLeftModuleFUNEitherEither(,,)$fLeftModuleFUNEitherEither(,)$fLeftModuleFUNEitherEitherK1 $fLeftModuleFUNEitherEitherThese!$fLeftModuleFUNEitherEitherEither $fLeftModuleFUNEitherEitherConst$fLeftModuleFUNEitherEitherArg!$fLeftModuleFUNEitherEitherCayley%$fLeftModuleFUNEitherEitherProcompose!$fLeftModuleFUNEitherEitherTannen"$fLeftModuleFUNEitherEitherProduct$fLeftModuleFUNEitherEitherSum'$fLeftModuleFUNEitherEitherWrappedArrow $fLeftModuleFUNEitherEitherJoker$fLeftModuleFUNEitherEitherStar!$fLeftModuleFUNEitherEitherForget$$fLeftModuleFUNEitherEitherCokleisli$fLeftModuleFUNEitherEitherFUN!$fLeftModuleFUNEitherEitherYoneda#$fLeftModuleFUNEitherEitherCoyoneda($fLeftModuleFUNEitherEitherCofreeMapping&$fLeftModuleFUNEitherEitherFreeMapping+$fLeftModuleFUNEitherEitherCofreeTraversing)$fLeftModuleFUNEitherEitherFreeTraversing%$fLeftModuleFUNEitherEitherTambaraSum$$fLeftModuleFUNEitherEitherPastroSum"$fLeftModuleFUNEitherEitherTambara!$fLeftModuleFUNEitherEitherTagged"$fLeftModuleFUNEitherEitherKleisli$fLeftModuleFUN(,)(,)Cayley$fLeftModuleFUN(,)(,)Procompose$fLeftModuleFUN(,)(,)Tannen$fLeftModuleFUN(,)(,)Product$fLeftModuleFUN(,)(,)Sum!$fLeftModuleFUN(,)(,)WrappedArrow$fLeftModuleFUN(,)(,)Clown$fLeftModuleFUN(,)(,)Star$fLeftModuleFUN(,)(,)Forget$fLeftModuleFUN(,)(,)FUN$fLeftModuleFUN(,)(,)Yoneda$fLeftModuleFUN(,)(,)Coyoneda"$fLeftModuleFUN(,)(,)CofreeMapping $fLeftModuleFUN(,)(,)FreeMapping%$fLeftModuleFUN(,)(,)CofreeTraversing#$fLeftModuleFUN(,)(,)FreeTraversing$fLeftModuleFUN(,)(,)Closure$fLeftModuleFUN(,)(,)Tambara$fLeftModuleFUN(,)(,)Pastro$fLeftModuleFUN(,)(,)KleisliMonoidalUnital introduce Semigroupal"$fSemigroupalFUN(,)Either(,)Forget($fSemigroupalFUNEitherEitherEitherForget%$fSemigroupalFUNEitherEither(,)Forget$fSemigroupalFUN(,)(,)(,)Forget $fSemigroupalFUN(,)Either(,)Star&$fSemigroupalFUNEitherEitherEitherStar#$fSemigroupalFUNEitherEither(,)Star$fSemigroupalFUN(,)(,)(,)Star$$fSemigroupalFUNEitherEither(,)Clown$fSemigroupalFUN(,)(,)(,)Clown'$fSemigroupalFUNEitherEitherEitherJoker$$fSemigroupalFUNEitherEither(,)Joker$fSemigroupalFUN(,)(,)(,)Joker"$fSemigroupalFUNEitherEither(,)FUN$fSemigroupalFUN(,)(,)(,)FUN!$fSemigroupalFUNThese(,)(,)Either"$fSemigroupalFUNEither(,)(,)Either($fSemigroupalFUNEitherEitherEitherEither%$fSemigroupalFUNEitherEitherEither(,)$fSemigroupalFUN(,)(,)(,)(,) $fSemigroupalFUN(,)EitherEitherp$fUnitalFUN()Void()Star$fUnitalFUNVoidVoidVoidStar$fUnitalFUNVoidVoid()Star$fUnitalFUN()()()Star$fUnitalFUNVoidVoidVoidJoker$fUnitalFUNVoidVoid()Joker$fUnitalFUN()()()Joker$fUnitalFUNVoidVoid()FUN$fUnitalFUNVoidVoidVoidFUN$fUnitalFUN()()()FUN$fUnitalFUNVoid()()Either$fUnitalFUNVoidVoidVoidEither$fUnitalFUNVoidVoidVoid(,)$fUnitalFUN()()()(,)%$fMonoidalFUN(,)()EitherVoid(,)()Star/$fMonoidalFUNEitherVoidEitherVoidEitherVoidStar*$fMonoidalFUNEitherVoidEitherVoid(,)()Star $fMonoidalFUN(,)()(,)()(,)()Star0$fMonoidalFUNEitherVoidEitherVoidEitherVoidJoker+$fMonoidalFUNEitherVoidEitherVoid(,)()Joker!$fMonoidalFUN(,)()(,)()(,)()Joker)$fMonoidalFUNEitherVoidEitherVoid(,)()FUN$fMonoidalFUN(,)()(,)()(,)()FUN&$fMonoidalFUNTheseVoid(,)()(,)()Either'$fMonoidalFUNEitherVoid(,)()(,)()Either1$fMonoidalFUNEitherVoidEitherVoidEitherVoidEither.$fMonoidalFUNEitherVoidEitherVoidEitherVoid(,)$fMonoidalFUN(,)()(,)()(,)()(,)'$fSemigroupalFUN(,)(,)(,)StrongCategory $fSemigroupoidTYPEStrongCategory*$fMonoidalFUN(,)()(,)()(,)()StrongCategory$fUnitalFUN()()()StrongCategory$fFunctorStrongCategory$fApplicativeStrongCategory$fMonadStrongCategory$fProfunctorStrongCategory$fCategoryTYPEStrongCategorymux***demux+++fanout&&&fanin|||switch&|uniondividesplice|&divergecontramapMaybezigzag ultrafirst ultrasecond ultraleft ultrarightcomuxundividecodemux partitioncoswitchunfaninunzipcospliceterminalppureinitialpolymonosplit'merge' InvariantinvIso$fInvariantFromFunctor$fInvariantFromContra$fInvariant(,,,)$fInvariant(,,)$fInvariant(,)$fInvariantProduct$fInvariantSum $fInvariantIO$fInvariantEither$fInvariantMaybe$fInvariantNonEmpty$fInvariantZipList $fInvariant[]$fInvariantCompose$fInvariantIdentity$fLeftModuleOp(,)FromFunctor$fLeftModuleFUNTheseFromFunctor $fLeftModuleFUNEitherFromFunctor$fLeftModuleOpEitherFromContra$fLeftModuleFUN(,)FromContra$fRightModuleOp(,)FromFunctor $fRightModuleFUNTheseFromFunctor!$fRightModuleFUNEitherFromFunctor$fRightModuleOpEitherFromContra$fRightModuleFUN(,)FromContra$fBimoduleOp(,)FromFunctor$fBimoduleFUNTheseFromFunctor$fBimoduleFUNEitherFromFunctor$fBimoduleOpEitherFromContra$fBimoduleFUN(,)FromContra$fBimoduleOp(,)(,,,)$fBimoduleOp(,)(,,)$fBimoduleOp(,)(,)$fBimoduleOp(,)Product$fBimoduleOp(,)Sum$fBimoduleOp(,)IO$fBimoduleOp(,)Either$fBimoduleOp(,)Maybe$fBimoduleOp(,)NonEmpty$fBimoduleOp(,)ZipList$fBimoduleOp(,)[]$fBimoduleOp(,)Compose$fBimoduleOp(,)Identity$fBimoduleFUNThese(,,,)$fBimoduleFUNThese(,,)$fBimoduleFUNThese(,)$fBimoduleFUNTheseProduct$fBimoduleFUNTheseSum$fBimoduleFUNTheseIO$fBimoduleFUNTheseThese$fBimoduleFUNTheseEither$fBimoduleFUNTheseMaybe$fBimoduleFUNTheseNonEmpty$fBimoduleFUNTheseZipList$fBimoduleFUNThese[]$fBimoduleFUNTheseCompose$fBimoduleFUNTheseIdentity$fBimoduleFUNEither(,,,)$fBimoduleFUNEither(,,)$fBimoduleFUNEither(,)$fBimoduleFUNEitherProduct$fBimoduleFUNEitherSum$fBimoduleFUNEitherIO$fBimoduleFUNEitherThese$fBimoduleFUNEitherEither$fBimoduleFUNEitherMaybe$fBimoduleFUNEitherNonEmpty$fBimoduleFUNEitherZipList$fBimoduleFUNEither[]$fBimoduleFUNEitherCompose$fBimoduleFUNEitherIdentity$fBimoduleOpEitherM1$fBimoduleOpEither:.:$fBimoduleOpEitherCompose$fBimoduleOpEitherK1$fBimoduleOpEither:*:$fBimoduleOpEither:+:$fBimoduleOpEitherSum$fBimoduleOpEitherProduct$fBimoduleOpEitherRec1$fBimoduleOpEitherAlt$fBimoduleOpEitherConst$fBimoduleOpEitherV1$fBimoduleOpEitherU1$fBimoduleOpEitherProxy$fBimoduleOpEitherOp$fBimoduleOpEitherPredicate$fBimoduleOpEitherEquivalence$fBimoduleOpEitherComparison$fBimoduleFUN(,)M1$fBimoduleFUN(,):.:$fBimoduleFUN(,)Compose$fBimoduleFUN(,)K1$fBimoduleFUN(,):*:$fBimoduleFUN(,):+:$fBimoduleFUN(,)Sum$fBimoduleFUN(,)Product$fBimoduleFUN(,)Rec1$fBimoduleFUN(,)Alt$fBimoduleFUN(,)Const$fBimoduleFUN(,)V1$fBimoduleFUN(,)U1$fBimoduleFUN(,)Proxy$fBimoduleFUN(,)Op$fBimoduleFUN(,)Predicate$fBimoduleFUN(,)Equivalence$fBimoduleFUN(,)Comparison$fRightModuleOp(,)(,,,)$fRightModuleOp(,)(,,)$fRightModuleOp(,)(,)$fRightModuleOp(,)Product$fRightModuleOp(,)Sum$fRightModuleOp(,)IO$fRightModuleOp(,)Either$fRightModuleOp(,)Maybe$fRightModuleOp(,)NonEmpty$fRightModuleOp(,)ZipList$fRightModuleOp(,)[]$fRightModuleOp(,)Compose$fRightModuleOp(,)Identity$fRightModuleFUNThese(,,,)$fRightModuleFUNThese(,,)$fRightModuleFUNThese(,)$fRightModuleFUNTheseProduct$fRightModuleFUNTheseSum$fRightModuleFUNTheseIO$fRightModuleFUNTheseThese$fRightModuleFUNTheseEither$fRightModuleFUNTheseMaybe$fRightModuleFUNTheseNonEmpty$fRightModuleFUNTheseZipList$fRightModuleFUNThese[]$fRightModuleFUNTheseCompose$fRightModuleFUNTheseIdentity$fRightModuleFUNEither(,,,)$fRightModuleFUNEither(,,)$fRightModuleFUNEither(,)$fRightModuleFUNEitherProduct$fRightModuleFUNEitherSum$fRightModuleFUNEitherIO$fRightModuleFUNEitherThese$fRightModuleFUNEitherEither$fRightModuleFUNEitherMaybe$fRightModuleFUNEitherNonEmpty$fRightModuleFUNEitherZipList$fRightModuleFUNEither[]$fRightModuleFUNEitherCompose$fRightModuleFUNEitherIdentity$fRightModuleOpEitherM1$fRightModuleOpEither:.:$fRightModuleOpEitherCompose$fRightModuleOpEitherK1$fRightModuleOpEither:*:$fRightModuleOpEither:+:$fRightModuleOpEitherSum$fRightModuleOpEitherProduct$fRightModuleOpEitherRec1$fRightModuleOpEitherAlt$fRightModuleOpEitherConst$fRightModuleOpEitherV1$fRightModuleOpEitherU1$fRightModuleOpEitherProxy$fRightModuleOpEitherOp$fRightModuleOpEitherPredicate $fRightModuleOpEitherEquivalence$fRightModuleOpEitherComparison$fRightModuleFUN(,)M1$fRightModuleFUN(,):.:$fRightModuleFUN(,)Compose$fRightModuleFUN(,)K1$fRightModuleFUN(,):*:$fRightModuleFUN(,):+:$fRightModuleFUN(,)Sum$fRightModuleFUN(,)Product$fRightModuleFUN(,)Rec1$fRightModuleFUN(,)Alt$fRightModuleFUN(,)Const$fRightModuleFUN(,)V1$fRightModuleFUN(,)U1$fRightModuleFUN(,)Proxy$fRightModuleFUN(,)Op$fRightModuleFUN(,)Predicate$fRightModuleFUN(,)Equivalence$fRightModuleFUN(,)Comparison$fLeftModuleOp(,)(,,,)$fLeftModuleOp(,)(,,)$fLeftModuleOp(,)(,)$fLeftModuleOp(,)Product$fLeftModuleOp(,)Sum$fLeftModuleOp(,)IO$fLeftModuleOp(,)Either$fLeftModuleOp(,)Maybe$fLeftModuleOp(,)NonEmpty$fLeftModuleOp(,)ZipList$fLeftModuleOp(,)[]$fLeftModuleOp(,)Compose$fLeftModuleOp(,)Identity$fLeftModuleFUNThese(,,,)$fLeftModuleFUNThese(,,)$fLeftModuleFUNThese(,)$fLeftModuleFUNTheseProduct$fLeftModuleFUNTheseSum$fLeftModuleFUNTheseIO$fLeftModuleFUNTheseThese$fLeftModuleFUNTheseEither$fLeftModuleFUNTheseMaybe$fLeftModuleFUNTheseNonEmpty$fLeftModuleFUNTheseZipList$fLeftModuleFUNThese[]$fLeftModuleFUNTheseCompose$fLeftModuleFUNTheseIdentity$fLeftModuleFUNEither(,,,)$fLeftModuleFUNEither(,,)$fLeftModuleFUNEither(,)$fLeftModuleFUNEitherProduct$fLeftModuleFUNEitherSum$fLeftModuleFUNEitherIO$fLeftModuleFUNEitherThese$fLeftModuleFUNEitherEither$fLeftModuleFUNEitherMaybe$fLeftModuleFUNEitherNonEmpty$fLeftModuleFUNEitherZipList$fLeftModuleFUNEither[]$fLeftModuleFUNEitherCompose$fLeftModuleFUNEitherIdentity$fLeftModuleOpEitherM1$fLeftModuleOpEither:.:$fLeftModuleOpEitherCompose$fLeftModuleOpEitherK1$fLeftModuleOpEither:*:$fLeftModuleOpEither:+:$fLeftModuleOpEitherSum$fLeftModuleOpEitherProduct$fLeftModuleOpEitherRec1$fLeftModuleOpEitherAlt$fLeftModuleOpEitherConst$fLeftModuleOpEitherV1$fLeftModuleOpEitherU1$fLeftModuleOpEitherProxy$fLeftModuleOpEitherOp$fLeftModuleOpEitherPredicate$fLeftModuleOpEitherEquivalence$fLeftModuleOpEitherComparison$fLeftModuleFUN(,)M1$fLeftModuleFUN(,):.:$fLeftModuleFUN(,)Compose$fLeftModuleFUN(,)K1$fLeftModuleFUN(,):*:$fLeftModuleFUN(,):+:$fLeftModuleFUN(,)Sum$fLeftModuleFUN(,)Product$fLeftModuleFUN(,)Rec1$fLeftModuleFUN(,)Alt$fLeftModuleFUN(,)Const$fLeftModuleFUN(,)V1$fLeftModuleFUN(,)U1$fLeftModuleFUN(,)Proxy$fLeftModuleFUN(,)Op$fLeftModuleFUN(,)Predicate$fLeftModuleFUN(,)Equivalence$fLeftModuleFUN(,)Comparison$fSemigroupalFUNThese(,)f$fSemigroupalFUNEither(,)f$fSemigroupalFUN(,)(,)f$fUnitalFUNVoid()f$fUnitalFUN()()f$fMonoidalFUNTheseVoid(,)()f$fMonoidalFUNEitherVoid(,)()f$fMonoidalFUN(,)()(,)()fbaseidGHC.BaseFunctorCategory FromContraData.Functor.Contravariant Contravariant FromBifunctorFromProfunctor(profunctors-5.6.2-CaoFmrk2WarFTcIXinjSthData.Profunctor.Unsafe Profunctor invmapFunctor