BSD-3-Clause licensed by Edward A. Kmett
Maintained by Edward A. Kmett
This version can be pinned in stack with:bifunctors-5.5.11@sha256:cc425ee85aae56dba1123baf6fb3fa7abcd90782f26bb904eef14c7332ee85f6,3919


Hackage Build Status

Contact Information

Contributions and bug reports are welcome!

Please feel free to contact me through github or on the #haskell IRC channel on

-Edward Kmett


5.5.11 [2021.04.30]

  • Allow building with template-haskell-2.18 (GHC 9.2).

5.5.10 [2021.01.21]

  • Fix a bug in which deriveBifoldable could generate code that triggers -Wunused-matches warnings.

5.5.9 [2020.12.30]

  • Explicitly mark modules as Safe or Trustworthy.

5.5.8 [2020.10.01]

  • Fix a bug in which deriveBifunctor would fail on sufficiently complex uses of rank-n types in constructor fields.
  • Fix a bug in which deriveBiunctor and related functions would needlessly reject data types whose two last type parameters appear as oversaturated arguments to a type family.

5.5.7 [2020.01.29]

  • Add Data.Bifunctor.Biap.

5.5.6 [2019.11.26]

  • Add Category, Arrow, ArrowChoice, ArrowLoop, ArrowZero, and ArrowPlus instances for Data.Bifunctor.Product.

5.5.5 [2019.08.27]

  • Add Eq{1,2}, Ord{1,2}, Read{1,2}, and Show{1,2} instances for data types in the Data.Bifunctor.* module namespace where possible. The operative phrase is “where possible” since many of these instances require the use of Eq2/Ord2/Read2/Show2, which are not avaiable when built against transformers-0.4.*.

5.5.4 [2019.04.26]

  • Support th-abstraction-0.3 or later.
  • Don’t incur a semigroup dependency on recent GHCs.

5.5.3 [2018.07.04]

  • Make biliftA2 a class method of Biapplicative.
  • Add the traverseBia, sequenceBia, and traverseBiaWith functions for traversing a Traversable container in a Biapplicative.
  • Avoid incurring some dependencies when using recent GHCs.

5.5.2 [2018.02.06]

  • Don’t enable Safe on GHC 7.2.

5.5.1 [2018.02.04]

  • Test suite fixes for GHC 8.4.

5.5 [2017.12.07]

  • Data.Bifunctor.TH now derives bimap/bitraverse implementations for empty data types that are strict in the argument.
  • Data.Bifunctor.TH no longer derives bifoldr/bifoldMap implementations that error on empty data types. Instead, they simply return the folded state (for bifoldr) or mempty (for bifoldMap).
  • When using Data.Bifunctor.TH to derive Bifunctor or Bitraversable instances for data types where the last two type variables are at phantom roles, generated bimap/bitraverse implementations now use coerce for efficiency.
  • Add Options to Data.Bifunctor.TH, along with variants of existing functions that take Options as an argument. For now, the only configurable option is whether derived instances for empty data types should use the EmptyCase extension (this is disabled by default).


  • Make deriveBitraversable use liftA2 in derived implementations of bitraverse when possible, now that liftA2 is a class method of Applicative (as of GHC 8.2)
  • Backport slightly more efficient implementations of bimapDefault and bifoldMapDefault


  • Add explicit Safe, Trustworthy, and Unsafe annotations. In particular, annotate the Data.Bifoldable module as Trustworthy (previously, it was inferred to be Unsafe).


  • Only export Data.Bifoldable and Data.Bitraversable when building on GHC < 8.1, otherwise they come from base
  • Allow TH derivation of Bifunctor and Bifoldable instances for datatypes containing unboxed tuple types


  • Added bifoldr1, bifoldl1, bimsum, biasum, binull, bilength, bielem, bimaximum, biminimum, bisum, biproduct, biand, bior, bimaximumBy, biminimumBy, binotElem, and bifind to Data.Bifoldable
  • Added Bifunctor, Bifoldable, and Bitraversable instances for GHC.Generics.K1
  • TH code no longer generates superfluous mempty or pure subexpressions in derived Bifoldable or Bitraversable instances, respectively


  • Added Bifoldable and Bitraversable instances for Constant from transformers
  • Data.Bifunctor.TH now compiles warning-free on GHC 8.0


  • Added several Arrow-like instances for Tannen so we can use it as the Cayley construction if needed.
  • Added Data.Bifunctor.Sum
  • Added BifunctorFunctor, BifunctorMonad and BifunctorComonad.
  • Backported Bifunctor Constant instance from transformers


  • Added Data.Bifunctor.Fix
  • Added Data.Bifunctor.TH, which permits TemplateHaskell-based deriving of Bifunctor, Bifoldable and Bitraversable instances.
  • Simplified Bitraversable.


  • Inverted the dependency on semigroupoids. We can support a much wider array of base versions than it can.
  • Added flags


  • Support Arg from semigroups 0.16.2
  • Fixed a typo.


  • Bumped dependency on tagged, which is required to build cleanly on GHC 7.9+
  • Only export Data.Bifunctor when building on GHC < 7.9, otherwise it comes from base.

  • Added documentation for ‘Bifoldable’ and ‘Bitraversable’


  • Added Data.Bifunctor.Join
  • Fixed improper lower bounds on base

  • Updated to BSD 2-clause license


  • Added product bifunctors


  • Compatibility with semigroupoids 4.0


  • Added missing product instances for Biapplicative and Biapply.


  • Added Data.Biapplicative.
  • Added the Clown and Joker bifunctors from Conor McBride’s “Clowns to the left of me, Jokers to the right.”
  • Added instances for Const, higher tuples
  • Added Tagged instances.


  • Added Data.Bifunctor.Flip and Data.Bifunctor.Wrapped.


  • Removed upper bounds from my other package dependencies