úÎ:/áL      !"#$%&'()*+,-./0123456789:;<=>?@A B C D E F G H I J K portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred LMNOPQR   LMNOPQRportable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredGUsable default for foldMap, but only if you define bifoldMap1 yourself STUVWXYZ[\]^_STUVWXYZ[\]^_portable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredMinimal definition either  or  and  Formally, the class  represents a bifunctor  from Hask -> Hask. WIntuitively it is a bifunctor where both the first and second arguments are covariant. You can define a  by either defining  or by defining both   and . If you supply , you should ensure that:   ` ` "a `If you supply  and  , ensure:     ` "a `   ` "a ` ,If you supply both, you should also ensure:   f g "a  f a  gThese ensure by parametricity:    (f a g) (h a i) "a  f h a  g i   (f a g) "a  f a  g   (f a g) "a  f a  g *Map over both arguments at the same time.  f g "a  f a  g)Map covariantly over the first argument.  f "a  f `*Map covariantly over the second argument.  "a  ` bcdefghbcdefghportable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred!   a .> b "a i ` j a <.> b "   a <. b "a i j a <.> b %Lift binary functions &Lift ternary functions  !"#$%&klmnop  !"#$%& !"#$%&  !"#$%&klmnopportable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferredq right-to-left state transformer r left-to-right state transformer !stuqvwrxy'()*+,-./01z{|}~€‚ƒ„…† '()*+,-./01 '()*+,-./01stuqvwrxy'()*+,-./01z{|}~€‚ƒ„…†portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred 2345‡ˆ‰Š‹Œ23452345 2345‡ˆ‰Š‹Œportable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred9   a Ž b "a i ` j a  b :   a  b "a i j a <.> b <Lift binary functions =Lift ternary functions 6789:;<=‘’“”•– #6789:;<= 6789:#;<= 6789:;<=‘’“”•–portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred>Make a — over the first argument of a . >?@˜™š›œžŸ ¡>?@>?@ >?@˜™š›œžŸ ¡ portable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredAMake a — over the first argument of a . ABC¢£¤¥¦§¨©ª«ABCABC ABC¢£¤¥¦§¨©ª« portable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredDMake a — over the second argument of a . DEF¬­®¯°±²³´µ¶·DEFDEF DEF¬­®¯°±²³´µ¶· portable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredG#Form the product of two bifunctors GH¸¹º»¼½GHGHGH¸¹º»¼½ portable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredIMake a — over the second argument of a . IJK¾¿ÀÁÂÃÄÅÆÇIJKIJK IJK¾¿ÀÁÂÃÄÅÆÇÈ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKKL M M N O O P Q R S T UVWXYZ[\]]^_`abcdefghijkijlmnopqrsijtiuvwxyz{|}~€}~‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–i—˜i—™i—š›œžŸ ij¡¢£¤¥¦§¨©ª« ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð ÑÒbifunctors-4.1.0.1Data.BifoldableData.Semigroup.BifoldableData.BifunctorData.Bifunctor.ApplyData.BitraversableData.Semigroup.BitraversableData.BiapplicativeData.Bifunctor.ClownData.Bifunctor.FlipData.Bifunctor.JokerData.Bifunctor.ProductData.Bifunctor.Wrapped Bifoldablebifold bifoldMapbifoldrbifoldlbifoldr'bifoldrMbifoldl'bifoldlM bitraverse_bifor_bimapM_biforM_ bisequenceA_ bisequence_biListbiconcat biconcatMapbianybiall Bifoldable1bifold1 bifoldMap1 bitraverse1_bifor1_ bisequenceA1_bifoldMapDefault1 BifunctorbimapfirstsecondBiapply<<.>>.>><<.<<$>><<..>>bilift2bilift3 Bitraversable bitraverse bisequenceAbimapM bisequencebiforbiforM bimapAccumL bimapAccumR bimapDefaultbifoldMapDefaultBitraversable1 bitraverse1 bisequence1bifoldMap1Default Biapplicativebipure<<*>>*>><<*<<**>>biliftA2biliftA3ClownrunClownFliprunFlipJokerrunJokerProductPairWrappedBifunctor WrapBifunctorunwrapBifunctor$fBifoldableEither$fBifoldableTagged$fBifoldable(,,,,)$fBifoldable(,,,)$fBifoldable(,,)$fBifoldableConst$fBifoldable(,)ActgetActignore $fFunctorAct$fSemigroupAct$fBifoldable1Tagged$fBifoldable1Const$fBifoldable1(,,,,)$fBifoldable1(,,,)$fBifoldable1(,,)$fBifoldable1(,)$fBifoldable1EitherbaseGHC.Baseid.$fBifunctorTagged$fBifunctorConst$fBifunctorEither$fBifunctor(,,,,)$fBifunctor(,,,)$fBifunctor(,,)$fBifunctor(,)const Data.Functor<$>$fBiapplyTagged$fBiapplyConst$fBiapply(,,,,)$fBiapply(,,,) $fBiapply(,,) $fBiapply(,)StateRStateLIdgetId runStateR runStateL$fApplicativeId $fFunctorId$fApplicativeStateR$fFunctorStateR$fApplicativeStateL$fFunctorStateL$fBitraversableTagged$fBitraversableConst$fBitraversableEither$fBitraversable(,,,,)$fBitraversable(,,,)$fBitraversable(,,)$fBitraversable(,)$fBitraversable1Tagged$fBitraversable1Const$fBitraversable1(,,,,)$fBitraversable1(,,,)$fBitraversable1(,,)$fBitraversable1(,)$fBitraversable1EitherControl.Applicative*><*><*$fBiapplicativeConst$fBiapplicativeTagged$fBiapplicative(,,,,)$fBiapplicative(,,,)$fBiapplicative(,,)$fBiapplicative(,)Functor$fBitraversable1Clown$fBifoldable1Clown$fTraversableClown$fBitraversableClown$fFoldableClown$fBifoldableClown$fBiapplyClown$fBiapplicativeClown$fFunctorClown$fBifunctorClown$fBitraversable1Flip$fBifoldable1Flip$fTraversableFlip$fBitraversableFlip$fFoldableFlip$fBifoldableFlip $fBiapplyFlip$fBiapplicativeFlip $fFunctorFlip$fBifunctorFlip$fTraversable1Joker$fBitraversable1Joker$fFoldable1Joker$fBifoldable1Joker$fTraversableJoker$fBitraversableJoker$fFoldableJoker$fBifoldableJoker$fBiapplyJoker$fBiapplicativeJoker$fFunctorJoker$fBifunctorJoker$fBitraversable1Product$fBifoldable1Product$fBitraversableProduct$fBifoldableProduct$fBiapplicativeProduct$fBifunctorProduct $fBitraversable1WrappedBifunctor$fBifoldable1WrappedBifunctor$fBitraversableWrappedBifunctor$fTraversableWrappedBifunctor$fBifoldableWrappedBifunctor$fFoldableWrappedBifunctor$fBiapplicativeWrappedBifunctor$fBiapplyWrappedBifunctor$fFunctorWrappedBifunctor$fBifunctorWrappedBifunctor