packages feed

constraints-0.13: CHANGELOG.markdown

0.13 [2021.02.17]
-----------------
* `Data.Constraint.Symbol` now reexports the `GHC.TypeLits.AppendSymbol` type
  family from recent versions of `base` (or, on old versions of `base`, it
  defines a backwards-compatibile version of `AppendSymbol`). The existing
  `(++)` type family for `Data.Constraint.Symbol` is now a synonym for
  `AppendSymbol`.

  This is technically a breaking change, as `(++)` was previously defined like
  so:

  ```hs
  type family (++) :: Symbol -> Symbol -> Symbol
  ```

  This meant that `(++)` could be partially applied. However, for compatibility
  with the way that `AppendSymbol` is defined, `(++)` is now defined like so:

  ```hs
  type m ++ n = AppendSymbol m n
  ```

  As a result, `(++)` can no longer be partially applied.
* Make the `(++)` type family in `Data.Constraint.Symbol` be `infixr 5`.
* Add `implied :: (a => b) -> (a :- b)` to `Data.Constraint`, which converts
  a quantified constraint into an entailment. This is only available when
  compiled with GHC 8.6 or later.

0.12 [2020.02.03]
-----------------
* Relax the type signature for `divideTimes`:

  ```diff
  -dividesTimes :: (Divides a b, Divides a c) :- Divides a (b * c)
  +dividesTimes ::  Divides a b               :- Divides a (b * c)
  ```

* Simplify the type signature of `dividesDef`:

  ```diff
  -dividesDef :: forall a b. Divides a b :- ((a * Div b a) ~ b)
  +dividesDef :: forall a b. Divides a b :- (Mod b a ~ 0)
  ```

  The original type of `diviesDef` can be (partially) recovered by defining
  it in terms of the new `dividesDef`:

  ```hs
  dividesDef' :: forall a b. (1 <= a, Divides a b) :- ((a * Div b a) ~ b)
  dividesDef' = Sub $ case (dividesDef @a @b, euclideanNat @a @b) of
    (Sub Dict, Sub Dict) -> Dict
  ```

0.11.2 [2019.09.06]
-------------------
* Depend on the `type-equality` compatibility library so that `(:~~:)` may be
  used when compiling this library with GHC 8.0. This avoids having to redefine
  `(:~~:)` directly in the internals of `constraints` itself.

0.11.1 [2019.08.27]
-------------------
* Make `Data.Constraint.Deferrable.UnsatisfiedConstraint` a newtype.

0.11 [2019.05.10]
-----------------
* Introduce a `HasDict` type class for types that witness evidence of
  constraints, such as `Dict`, `(:-)`, `Coercion`, `(:~:)`, `(:~~:)`, and
  `TypeRep`.
* Generalize the types of `withDict` and `(\\)` to be polymorphic over
  any `HasDict` instance.
* Add `type (⊢) = (:-)`.
* Fix unsafe mistakes in the statements of `dividesDef` and `timesDiv` in
  `Data.Constraint.Nat`.
* Make the implementations of `Min` and `Max` reduce on more inputs in
  `Data.Constraint.Nat`.
* Add `minusNat` and `minusZero` functions to `Data.Constraint.Nat`.
* Support `hashable-1.3.*` and `semigroups-0.19.*`.

0.10.1 [2018.07.02]
-------------------
* Allow building with GHC 8.6.
* Add three axioms about `(+)` and `(-)` to `Data.Constraint.Nat`.

0.10
----
* Adapt to the `Semigroup`–`Monoid` Proposal (introduced in `base-4.11`):
  * Add a `Semigroup` instance for `Dict`
  * Add the appropriate `(:=>)` instances involving `Semigroup`, and change the
    `Class () (Monoid a)` instance to `Class (Semigroup a) (Monoid a)` when
    `base` is recent enough
  * Add the appropriate `Lifting(2)` instances involving `Semigroup`
* `Data.Constraint.Nat` now reexports the `Div` and `Mod` type families from
  `GHC.TypeLits` on `base-4.11` or later
* Fix the type signature of `maxCommutes`
* Export the `no` method of `Bottom`
* Add `NFData` instances for `Dict` and `(:-)`

0.9.1
-----
* Correct an improper use of `unsafeCoerce` in the internals of
  `Data.Constraint.Nat` and `Data.Constraint.Symbol`
* Correctly identify the mismatched types when you defer an unsatisfiable
  equality constraint through `Data.Constraint.Deferrable`
* Re-export the `(:~~:)` defined in `base` from `Data.Constraint.Deferred` with
  GHC 8.2 or later
* Add several new `(:=>)` instances for `Bits`, `Identity`, `Const`, `Natural`,
  `IO`, and `Word`.
* Modernize some existing `Class` and `(:=>)` instances to reflect the fact
  that `Applicative` is now a superclass of `Monad` on recent versions of
  `base`.

0.9
---
* Changes to `Data.Constraint`:
  * Add `strengthen1` and `strengthen2`
* Changes to `Data.Constraint.Deferrable`:
  * Add a `Deferrable ()` instance
  * The `Deferrable (a ~ b)` instance now shows the `TypeRep`s of `a` and `b`
    when a type mismatch error is thrown
  * Add `defer_` and `deferEither_`, counterparts to `defer` and `deferEither`
    which do not require proxy arguments
  * Enable `PolyKinds`. This allows the `Deferrable (a ~ b)` instance to be
    polykinded on all supported versions of GHC _except_ 7.10, where the kinds
    must be `*` due to an old GHC bug
  * Introduce a heterogeneous equality type `(:~~:)`, and use it to define a
    `Deferrable (a ~~ b)` instance on GHC 8.0 or later
* Changes to `Data.Constraint.Forall`:
  * Implement `ForallF` and `ForallT` in terms of `Forall`
  * Add `ForallV` and `InstV` (supporting a variable number of parameters)
  * Add a `forall` combinator
* Introduce `Data.Constraint.Nat` and `Data.Constraint.Symbol`, which contain
  utilities for working with `KnownNat` and `KnownSymbol` constraints,
  respectively. These modules are only available on GHC 8.0 or later.

0.8
-----
* GHC 8 compatibility
* `transformers` 0.5 compatibility
* `binary` 0.8 compatibility
* Dropped support for GHC 7.6 in favor of a nicer Bottom representation.

0.7
---
* Found a nicer encoding of the initial object in the category of constraints using a [nullary constraint](https://ghc.haskell.org/trac/ghc/ticket/7642).

0.6.1
-----
* Remove the need for closed type families from the new `Forall`.

0.6
---
* Completely redesigned `Data.Constraint.Forall`. The old design is unsound and can be abused to define `unsafeCoerce`!
  The new design requires closed type families, so this module now requires GHC 7.8+

0.5.1
-----
* Added `Data.Constraint.Deferrable`.

0.5
-----
* Added `Data.Constraint.Lifting`.

0.4.1.3
-------
* Acknowledge we actually need at least base 4.5

0.4.1.2
-------
* Restore support for building on older GHCs

0.4.1.1
-------
* Minor documentation fixes.

0.4.1
-----
* Added `mapDict` and `unmapDict`.
* Added a lot of documentation.

0.4
---
* `Typeable` and `Data`. The `Data` instance for `(:-)` is a conservative approximation that avoids having to turn (:-) into a cartesian closed category.
  If it becomes a pain point for users, I know how to do that, and have done so in other libraries -- see [hask](http://github.com/ekmett/hask), but I'm hesitant to bring such heavy machinery to bear and it isn't clear how to do it in a way that is compatible with those other libraries.

0.3.5
-----
* Explicit role annotations

0.3.4.1
-------
* Fixed build failures.
* Fixed an unused import warning on older GHCs.

0.3.4
-----
* Added `bottom`