This package provides a data type These a b which can hold a value of either
type or values of each type. This is usually thought of as an "inclusive or"
type (contrasting Either a b as "exclusive or") or as an "outer join" type
(contrasting (a, b) as "inner join").
data These a b = This a | That b | These a b
Since version 1, this package was split into parts:
The QuickCheck instances are moved into quickcheck-instances
The semigroupoids instances are gone for now.
1.0.1
add partitionEithersNE :: NonEmpty (Either a b) -> These (NonEmpty a) (NonEmpty b)
1
This is major package reogranisation. Old these were split into
these providing only These type and some combinators
these-lens providing lens combinators
semialign providing Semialign, Align, Zip, Unalign and Unzip classes
semialign-indexed providing SemialignWithIndex (izipWith and ialignWith members).
monad-chronicle providing ChronicleT and MonadChronicle
Also noticeable change is unalign :: f (These a b) -> (f a, f b).
For the old f (These a b) -> (f (Maybe a), f (Maybe b)) use unzipWith (unalign . Just).
Many instances are added.
Since annotations are removed for all but these package.
0.8.1
Add SemialignTree, Tagged, (->) e; AlignCompose and Proxy instances
Allow semigroups-0.19 and hashable-1.3
0.8.0
Split align and alignWith into own class: Semialign.
ialign has default implementation
Add SemialignNonEmpty and Identity instances
Add Swap and Assoc instances (type classes from assoc package)
Move optics into Data.These.Lens module,
and and some combinators Data.These.Combinators.
Also some combinators are renamed, so naming is now consistent.
As the result Data.These has very minimal exports.
Change type of partitionThese (nested pairs to triple)
Add partitionHereThere :: [These a b] -> ([a],[b])
0.7.6
Tigthen lower bounds
Add dependency on lens
Add assoc, reassoc, swap and Swapped instance
Add since annotations for things added in 0.7.x
Add AlignWithKey ZipList instance
Add Data.Align.Indexed module.
Add Data.Functor.These with These1 data type.
Add associativity law
Add toList property to enforce “align”-feel.
Map and IntMapAlign instances implemented using merge combinators
(when available)
0.7.5
Add Compose and (,)Crosswalk instances
Add bitraverseThese
GHC-8.6 support
0.7.4
QuickCheck-2.10 support: Arbitrary1/2 instances
GHC-8.2 support
0.7.3
Add salign :: (Align f, Semigroup a) => f a -> f a -> f a
0.7.2
Support aeson-1: add FromJSON1, FromJSON2ToJSON1, and ToJSON2These instances.
0.7.1
Add AlignWithKey in Data.Align.Key (added dependency keys)
Add These instances for
binary: Binary
aeson: FromJSON, ToJSON
QuickCheck: Arbitrary, CoArbitrary, Function
deepseq: NFData
0.7
Breaking change: Generalized Monad, Applicative instances of These and Chronicle to require only a Semigroup constraint