úÎ7Œ-ÄJ      !"#$%&'()*+,-./0123456789:;<=>?@A B C D E F G H I portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred JKLMNOP   JKLMNOPportable provisionalEdward Kmett <ekmett@gmail.com> Safe-InferredGUsable default for foldMap, but only if you define bifoldMap1 yourself QRSTUVWXYZ[\]QRSTUVWXYZ[\]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 _  gThese ensure by parametricity:    (f _ g) (h _ i) "a  f h _  g i   (f _ g) "a  f _  g   (f _ g) "a  f _  g *Map over both arguments at the same time.  f g "a  f _  g)Map covariantly over the first argument.  f "a  f ^*Map covariantly over the second argument.  "a  ^ `abcdef`abcdefportable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred!   a .> b "a g ^ h a <.> b "   a <. b "a g h a <.> b %Lift binary functions &Lift ternary functions  !"#$%&ijklmn  !"#$%& !"#$%&  !"#$%&ijklmnportable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferredo right-to-left state transformer p left-to-right state transformer !qrsotupvw'()*+,-./01xyz{|}~€‚ƒ„ '()*+,-./01 '()*+,-./01qrsotupvw'()*+,-./01xyz{|}~€‚ƒ„portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred 2345…†‡ˆ‰Š‹23452345 2345…†‡ˆ‰Š‹portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred9   a Œ b "a g ^ h a  b :   a Ž b "a g h 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-InferredGMake a • over the second argument of a . GHI¶·¸¹º»¼½¾¿GHIGHI GHI¶·¸¹º»¼½¾¿À   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJJK L L M N N O P Q RSTUVWXYZZ[\]^_`abcdefghfgijklmnopfgqfrstuvwxyz{||}z~{€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“f”•f”–f”—˜™š›œfgžŸ ¡¢£¤¥¦§¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç ÈÉbifunctors-3.2.0.1Data.BifoldableData.Semigroup.BifoldableData.BifunctorData.Bifunctor.ApplyData.BitraversableData.Semigroup.BitraversableData.BiapplicativeData.Bifunctor.ClownData.Bifunctor.FlipData.Bifunctor.JokerData.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<<*>>*>><<*<<**>>biliftA2biliftA3ClownrunClownFliprunFlipJokerrunJokerWrappedBifunctor 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 $fBitraversable1WrappedBifunctor$fBifoldable1WrappedBifunctor$fBitraversableWrappedBifunctor$fTraversableWrappedBifunctor$fBifoldableWrappedBifunctor$fFoldableWrappedBifunctor$fBiapplicativeWrappedBifunctor$fBiapplyWrappedBifunctor$fFunctorWrappedBifunctor$fBifunctorWrappedBifunctor