*** -package:constraints

Split the input between the two argument arrows and combine their output. Note that this is in general not a functor. The default definition may be overridden with a more efficient version if desired.
b ╭─────╮ b'
>───┼─ f ─┼───>
>───┼─ g ─┼───>
c ╰─────╯ c'
Given two functions, apply one to the first component and one to the second. A specialised version of ***.
(succ *** reverse) (1,"test") == (2,"tset")
Split the input between the two argument arrows and combine their output. Note that this is in general not a functor. The default definition may be overridden with a more efficient version if desired.
Specialization of Bimap for pairs.
Split the input between the two argument arrows and combine their output. Note that this is in general not a functor. The default definition may be overridden with a more efficient version if desired.
a *** b blits b in the centre of a.
the product type constructor (,) is a bifunctor from Iso $times$ Iso to Iso, so that we have the bifunctorial map *** which allows two separate isomorphisms to work on the two components of a tuple.
Split the input between the two argument arrows and combine their output. Note that this is in general not a functor.
Infix operator for mux.
Categorical generalization of
bimap :: (a1 -> b1) -> (a2 -> b2) -> (p a1 a2 -> p c1 c2)
borrowed from arrows.
Use \f g -> (,) <$> lmap fst f <*> lmap snd g instead. (***!) may be deprecated in a future version.
***$ is the generalisation of Functor's <$>. ***$ = rmap, just like <$> = fmap. (You probably won't need to use this. <$> should be sufficient.) Since 0.11.1.0: Generalised to work on arbitrary Profunctors.
**** is the generalisation of Applicative's <*>. (You probably won't need to use this except to define ProductProfunctor instances. In your own code <*> should be sufficient.)
Left-strict version of *** for functions.