ghc-typelits-knownnat-0.7.12: Derive KnownNat constraints from other KnownNat constraints

# ghc-typelits-knownnat-0.7.12: Derive KnownNat constraints from other KnownNat constraints

A type checker plugin for GHC that can derive "complex" `KnownNat` constraints from other simple/variable `KnownNat` constraints. i.e. without this plugin, you must have both a `KnownNat n` and a `KnownNat (n+2)` constraint in the type signature of the following function:

    f :: forall n . (KnownNat n, KnownNat (n+2)) => Proxy n -> Integer
    f _ = natVal (Proxy :: Proxy n) + natVal (Proxy :: Proxy (n+2))

Using the plugin you can omit the `KnownNat (n+2)` constraint:

    f :: forall n . KnownNat n => Proxy n -> Integer
    f _ = natVal (Proxy :: Proxy n) + natVal (Proxy :: Proxy (n+2))

The plugin can derive `KnownNat` constraints for types consisting of:

- Type variables, when there is a corresponding `KnownNat` constraint
- Type-level naturals
- Applications of the arithmetic expression: +,-,*,^
- Type functions, when there is either:

1. a matching given `KnownNat` constraint; or
2. a corresponding `KnownNat<N>` instance for the type function

To use the plugin, add the

    OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver

Pragma to the header of your file.

Modules

ghc-typelits-knownnat-0.7.12

- GHC
  Submodules
  - TypeLits
    Submodules
    - GHC.TypeLits.KnownNat
      Submodules
      - GHC.TypeLits.KnownNat.Solver