bifunctors
Bifunctors
http://github.com/ekmett/bifunctors/
Version on this page: | 5.6.2 |
LTS Haskell 23.1: | 5.6.2@rev:1 |
Stackage Nightly 2024-12-22: | 5.6.2@rev:1 |
Latest on Hackage: | 5.6.2@rev:1 |
bifunctors-5.6.2@sha256:e6a6e576b9e027ca374383c2d3a43753bce42c63c72724d3a35208a982d68c0f,3201
Module documentation for 5.6.2
- Data
- Data.Biapplicative
- Data.Bifunctor
Changes
5.6.2 [2024.03.19]
- Support building with
template-haskell-2.22.*
(GHC 9.10).
5.6.1 [2023.03.13]
- Provide instances for the
Swap
andAssoc
type classes from theassoc
package. (These instances were previously defined inassoc
itself, but they have been migrated over tobifunctors
in tandem with theassoc-1.1
release.) - Only depend on
bifunctor-classes-compat
if building with GHC 8.0.
5.6 [2023.03.12]
-
Drop support for GHC 7.10 and earlier.
-
Move the
Data.Bifunctor
,Data.Bifoldable
, andData.Bitraversable
compatibility modules to the newbifunctor-classes-compat
package. For backwards compatibility, thebifunctors
library re-exportsData.Bifoldable
andData.Bitraversable
modules frombifunctor-classes-compat
when building with GHC 8.0.If your library depends on
bifunctors
and compiles with pre-8.2 versions of GHC, be warned that it may be possible to construct a build plan involving a pre-5.6
version ofbifunctors
where:- Some of the
Bifunctor
instances come frombifunctor-classes-compat
’s compatibility classes, and - Other
Bifunctor
instances come frombifunctors
’s compatibility classes.
These compatibility classes are distinct, so this could lead to build errors under certain conditions. Some possible ways to mitigate this risk include:
-
Drop support for GHC 8.0 and older in your library.
-
Require
bifunctors >= 5.6
in your library. -
If neither of the options above are viable, then you can temporarily define instances for the old compatibility classes from
bifunctors
like so:-- For Bifunctor instances import qualified "bifunctor-classes-compat" Data.Bifunctor as BifunctorCompat #if !MIN_VERSION_bifunctors(5,6,0) && !MIN_VERSION_base(4,8,0) import qualified "bifunctors" Data.Bifunctor as Bifunctor #endif instance BifunctorCompat.Bifunctor MyType where ... #if !MIN_VERSION_bifunctors(5,6,0) && !MIN_VERSION_base(4,8,0) instance Bifunctor.Bifunctor MyType where ... #endif
-- For Bifoldable and Bitraversable instances import qualified "bifunctor-classes-compat" Data.Bifoldable as BifoldableCompat import qualified "bifunctor-classes-compat" Data.Bitraversable as BitraversableCompat #if !MIN_VERSION_bifunctors(5,6,0) && !MIN_VERSION_base(4,10,0) import qualified "bifunctors" Data.Bifoldable as Bifoldable import qualified "bifunctors" Data.Bitraversable as Bitraversable #endif instance BifoldableCompat.Bifoldable MyType where ... instance BitraversableCompat.Bitraversable MyType where ... #if !MIN_VERSION_bifunctors(5,6,0) && !MIN_VERSION_base(4,10,0) instance Bifoldable.Bifoldable MyType where ... instance Bitraversable.Bitraversable MyType where ... #endif
If your package does nothing but define instances of
Bifunctor
et al., you may consider replacing yourbifunctors
dependency withbifunctor-classes-compat
to reduce your dependency footprint. If you do, it is strongly recommended that you bump your package’s major version number so that your users are alerted to the details of the migration. - Some of the
-
Define a
Foldable1
instance forJoker
, and defineBifoldable1
instances forBiff
,Clown
,Flip
,Join
,Joker
,Product
,Tannen
, andWrappedBifunctor
. These instances were originally defined in thesemigroupoids
library, and they have now been migrated tobifunctors
as a side effect of adapting to this Core Libraries Proposal, which addsFoldable1
andBifoldable1
tobase
.
5.5.15 [2023.02.27]
- Support
th-abstraction-0.5.*
.
5.5.14 [2022.12.07]
- Define
Functor
,Foldable
, andTraversable
instances forSum
andProduct
.
5.5.13 [2022.09.12]
- Make the
Biapplicative
instances for tuples lazy, to match theirBifunctor
instances.
5.5.12 [2022.05.07]
- Backport an upstream GHC change which removes the default implementation of
bitraverse
. Per the discussion in https://github.com/haskell/core-libraries-committee/issues/47, this default implementation was completely broken, as attempting to use it would always result in an infinite loop.
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
, andArrowPlus
instances forData.Bifunctor.Product
.
5.5.5 [2019.08.27]
- Add
Eq{1,2}
,Ord{1,2}
,Read{1,2}
, andShow{1,2}
instances for data types in theData.Bifunctor.*
module namespace where possible. The operative phrase is “where possible” since many of these instances require the use ofEq2
/Ord2
/Read2
/Show2
, which are not available when built againsttransformers-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 ofBiapplicative
. - Add the
traverseBia
,sequenceBia
, andtraverseBiaWith
functions for traversing aTraversable
container in aBiapplicative
. - 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 derivesbimap
/bitraverse
implementations for empty data types that are strict in the argument.Data.Bifunctor.TH
no longer derivesbifoldr
/bifoldMap
implementations that error on empty data types. Instead, they simply return the folded state (forbifoldr
) ormempty
(forbifoldMap
).- When using
Data.Bifunctor.TH
to deriveBifunctor
orBitraversable
instances for data types where the last two type variables are at phantom roles, generatedbimap
/bitraverse
implementations now usecoerce
for efficiency. - Add
Options
toData.Bifunctor.TH
, along with variants of existing functions that takeOptions
as an argument. For now, the only configurable option is whether derived instances for empty data types should use theEmptyCase
extension (this is disabled by default).
5.4.2
- Make
deriveBitraversable
useliftA2
in derived implementations ofbitraverse
when possible, now thatliftA2
is a class method ofApplicative
(as of GHC 8.2) - Backport slightly more efficient implementations of
bimapDefault
andbifoldMapDefault
5.4.1
- Add explicit
Safe
,Trustworthy
, andUnsafe
annotations. In particular, annotate theData.Bifoldable
module asTrustworthy
(previously, it was inferred to beUnsafe
).
5.4
- Only export
Data.Bifoldable
andData.Bitraversable
when building on GHC < 8.1, otherwise they come frombase
- Allow TH derivation of
Bifunctor
andBifoldable
instances for datatypes containing unboxed tuple types
5.3
- Added
bifoldr1
,bifoldl1
,bimsum
,biasum
,binull
,bilength
,bielem
,bimaximum
,biminimum
,bisum
,biproduct
,biand
,bior
,bimaximumBy
,biminimumBy
,binotElem
, andbifind
toData.Bifoldable
- Added
Bifunctor
,Bifoldable
, andBitraversable
instances forGHC.Generics.K1
- TH code no longer generates superfluous
mempty
orpure
subexpressions in derivedBifoldable
orBitraversable
instances, respectively
5.2.1
- Added
Bifoldable
andBitraversable
instances forConstant
fromtransformers
Data.Bifunctor.TH
now compiles warning-free on GHC 8.0
5.2
- Added several
Arrow
-like instances forTannen
so we can use it as the Cayley construction if needed. - Added
Data.Bifunctor.Sum
- Added
BifunctorFunctor
,BifunctorMonad
andBifunctorComonad
. - Backported
Bifunctor Constant
instance fromtransformers
5.1
- Added
Data.Bifunctor.Fix
- Added
Data.Bifunctor.TH
, which permitsTemplateHaskell
-based deriving ofBifunctor
,Bifoldable
andBitraversable
instances. - Simplified
Bitraversable
.
5
- Inverted the dependency on
semigroupoids
. We can support a much wider array ofbase
versions than it can. - Added flags
4.2.1
- Support
Arg
fromsemigroups
0.16.2 - Fixed a typo.
4.2
- 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 frombase
.
4.1.1.1
- Added documentation for ‘Bifoldable’ and ‘Bitraversable’
4.1.1
- Added
Data.Bifunctor.Join
- Fixed improper lower bounds on
base
4.1.0.1
- Updated to BSD 2-clause license
4.1
- Added product bifunctors
4.0
- Compatibility with
semigroupoids
4.0
3.2
- Added missing product instances for
Biapplicative
andBiapply
.
3.1
- Added
Data.Biapplicative
. - Added the
Clown
andJoker
bifunctors from Conor McBride’s “Clowns to the left of me, Jokers to the right.” - Added instances for
Const
, higher tuples - Added
Tagged
instances.
3.0.4
- Added
Data.Bifunctor.Flip
andData.Bifunctor.Wrapped
.
3.0.3
- Removed upper bounds from my other package dependencies