# Changelog for the `parameterized-utils` package
## 2.0 -- *2019 Apr 03*
* Drop support for GHC versions prior to GHC 8.2
* Various Haddock and module updates.
* Data.Parameterized.Classes
- Added function: `ordFCompose`
- Added `OrdF` instance for `Compose`
* Data.Parameterized.ClassesC
- Marked as `Safe` haskell via pragma
- Added `OrdC` instance for `Some`
* Data.Parameterized.Compose
- Update `testEqualityComposeBare` to be more kind-polymorphic.
- Marked as `Safe` haskell via pragma
* Data.Parameterized.Context
- Added `diffIsAppend` function to extract the contextual
difference between two `Context`s (as a `Diff`) as an `IsAppend`
(new) data value if the left is a sub-context of the right.
* Data.Parameterized.NatRepr
- Change runtime representation from `Int` to `Natural`
- Add function `intValue` to recover an `Int` from a `NatRepr`.
- Add constructor function `mkNatRepr` to construct a `NatRepr`
from a `Natural`.
- Removed awkward backdoor for directly creating `NatRepr` values;
the single needed internal usage is now handled internally.
* Data.Parameterized.Peano
- Newly added module.
- Defines a type `Peano` and `PeanoRepr` for representing a
type-level natural at runtime.
- The runtime representation of `PeanoRepr` is `Word64`
- Has both safe and unsafe implementations.
* Data.Parameterized.WithRepr
- Newly added module.
- This module declares a class `IsRepr` with a single method
`withRepr` that can be used to derive a 'KnownRepr' constraint
from an explicit 'Repr' argument. Clients of this method need
only create an empty instance. The default implementation
suffices.
## 1.0.8 -- *2019 Feb 01*
* Data.Parameterized.Map
- Fixed `MapF` functions `filter` and `filterWithKey`
- Added `MapF` function: `mapWithKey`
* Data.Parameterized.NatRepr
- Un-deprecate `withKnownNat`
* Data.Parameterized.Context
- Updated some haddock documentation (esp. `CtxEmbedding` data structure).
* Data.Parameterized.Nonce
- Fixed `newIONonceGenerator` haddock documentation (IO monad, not ST monad).
- Added `countNoncesGenerated` for profiling Nonce usage.
* Data.Parameterized.TraversableF
- Added `FunctorF`, `FoldableF`, and `TraversableF` instances for
`Compose` from Data.Functor.Compose
* Data.Parameterized.ClassesC
- Newly added module.
- Declares `TestEqualityC` and `OrdC` classes for working with
types that have kind `(k -> *) -> *` for any `k`.
* Data.Parameterized.Compose
- Newly added module.
- Orphan instance and `testEqualityComposeBare` function for
working with Data.Functor.Compose.
* Data.Parameterized.TestEquality
- Newly added module.
- Utilities for working with Data.Type.TestEquality.
## 1.0.7 -- *2018 Nov 17*
* Data.Parameterized.Map
- Added `MapF` functions:
- `filter`
- `filterWithKey`
## 1.0.6 -- *2018 Nov 19*
* Add support for GHC 8.6.
* Data.Parameterized.Map
- Added functions:
- `foldlWithKey` and `foldlWithKey'` (strict)
- `foldrWithKey` and `foldrWithKey'` (strict)
- `mapMaybeWithKey`
## 1.0.5 -- *2018 Sep 04*
* Data.Parameterized.Context
- Add function: `take`, `appendEmbedding`, `appendDiff`
- Diff is type role nominal in both parameters.
## 1.0.4 -- *2018 Aug 29*
* Data.Parameterized.Context
- Add `traverseAndCollect`. Allows traversal of an Assignment in
order from left to right, collecting the results of a visitor
function monoidically.
* Data.Parameterized.DecidableEq
- Newly added module. The `DecidableEq` class represents
decideable equality on a type family as a superclass of
`TestEquality`, where the latter cannot provide evidence of
non-equality.
* Data.Parameterized.NatRepr
- Add `DecidableEq` instance for NatRepr.
- Add functions:
- `decideLeq`
- `isZeroOrGT1`
- `lessThanIrreflexive`
- `lessThanAsymmetric`
- `natRecStrong` -- recursor with strong induction
- `natRecBounded` -- bounded recursor
- `natFromZero`
* Data.Parameterized.Vector
- Add construction functions: `singleton`, `cons`, `snoc`, `generate`, and `generateM`
- Add functions: `splitWithA` (applicative `splitWith`).
## 1.0.3 -- *2018 Aug 24*
* Move `lemmaMul` from Vector to NatRepr.
* Add stricter role annotations:
- `NatRepr` is nominal.
- `Vector` is nominal in the first parameter and representational in the second.
* Data.Parameterized.NatRepr
- Provide a backdoor for directly creating `NatRepr` values. Use carefully.
* Data.Parameterized.Vector
- Add Show and Eq instances
- Add functions: `joinWithM`, `reverse`
## 1.0.2 -- *2018 Aug 23*
* Allow function passed to `traverseF_`, `traverseFC_`, and
`forMFC_` to return a value instead of null (`()`).
* Data.Parameterized.Vector
- Newly added module. A fixed-size vector of typed elements.
* Data.Parameterized.Utils.Endian
- Newly added module. Used in Vector.
## 1.0.1 -- *2018 Aug 13*
Baseline for changelog tracking.