úÎÖU        the product type constructor `(,)` is a bifunctor from   $times$  to , so that we have the  bifunctorial map ) which allows two separate isomorphisms + to work on the two components of a tuple. .The mediating arrow for sums constructed with . 5 This is not a proper partial isomorphism because of . Nested products associate. Products commute. `()`$ is the unit element for products. Products distribute over sums. ` element x`$ is the partial isomorphism between `()` and the # singleton set which contains just x. For a predicate p, `subset p` is the identity isomorphism 0 restricted to elements matching the predicate.             !"#!$%&partial-isomorphisms-0.1"Control.Isomorphism.Partial.UnsafeControl.Isomorphism.Partial.TH(Control.Isomorphism.Partial.Constructors Control.Isomorphism.Partial.Prim#Control.Isomorphism.Partial.DerivedControl.Isomorphism.PartialIsoconstructorIsodefineIsomorphismsnilcons listCasesleftrightnothingjust IsoFunctor<$>inverseapplyunapplyignore***||| associatecommuteunit distributeelementsubsetiteratefoldlbase Data.EitherEither Control.Monadmplus