# constraints

Constraint manipulation http://github.com/ekmett/constraints/

 LTS Haskell 16.16: 0.12 Stackage Nightly 2020-09-28: 0.12 Latest on Hackage: 0.12

See all snapshots `constraints` appears in

Maintained by

#### Module documentation for 0.12

This version can be pinned in stack with:`constraints-0.12@sha256:71c7999d7fa01d8941f08d37d4c107c6b1bcbd0306e234157557b9b096b7f1be,2217`

# constraints

This package provides data types and classes for manipulating the ‘ConstraintKinds’ exposed by GHC in 7.4.

## Contact Information

Contributions and bug reports are welcome!

Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.

-Edward Kmett

## 0.12 [2020.02.03]

• Relax the type signature for `divideTimes`:

``````-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`:

``````-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`:

``````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.

## 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, 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`
Depends on 10 packages(full list with versions):
Used by 15 packages in lts-16.14(full list with versions):