# constraints

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

Version on this page: | 0.8 |

LTS Haskell 8.20: | 0.9.1 |

Stackage Nightly 2017-06-26: | 0.9.1 |

Latest on Hackage: | 0.9.1 |

**Edward A. Kmett**

**Edward A. Kmett**

#### Module documentation for 0.8

## Changes

## 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*The`Deferrable ()`

instance`Deferrable (a ~ b)`

instance now shows the`TypeRep`

s of`a`

and`b`

when a type mismatch error is thrown*Add*Enable`defer_`

and`deferEither_`

, counterparts to`defer`

and`deferEither`

which do not require proxy arguments`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*Add`ForallF`

and`ForallT`

in terms of`Forall`

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