these-0.7.3: An either-or-both data type & a generalized 'zip with padding' typeclass

# these-0.7.3: An either-or-both data type & a generalized 'zip with padding' typeclass

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").

The major use case of this is provided by the `Align` class, representing a generalized notion of "zipping with padding" that combines structures without truncating to the size of the smaller input.

Also included is `ChronicleT`, a monad transformer based on the Monad instance for `These a`, along with the usual monad transformer bells and whistles.

Modules

- Control
  - Monad
    - Control.Monad.Chronicle
      - Control.Monad.Chronicle.Class
    - Trans
      - Control.Monad.Trans.Chronicle
- Data
  - Data.Align
    - Data.Align.Key
  - Data.These