packages feed

ghc-typelits-natnormalise-0.1: README.md

# ghc-tynat-normalise

A type checker plugin for GHC that can solve _equalities_ 
of types of kind `Nat`, where these types are either:

* Type-level naturals
* Type variables
* Applications of the arithmetic expressions `(+,-,*,^)`.

It solves these equalities by normalising them to _sort-of_
`SOP` (Sum-of-Products) form, and then perform a
simple syntactic equality.

For example, this solver can prove the equality between:

```
(x + 2)^(y + 2)
```

and

```
4*x*(2 + x)^y + 4*(2 + x)^y + (2 + x)^y*x^2
```

Because the latter is actually the `SOP` normal form
of the former.

To use the plugin, add

```
{-# OPTIONS_GHC -fplugin GHC.TypeLits.Normalise #-}
```

To the header of your file.