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`