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

[ bsd2, library, type-system ] [ Propose Tags ]

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 only derive KnownNat constraints consisting of:

  • Type-level naturals

  • Type variables

  • Applications of the arithmetic expression: +,*,^

i.e. it cannot derive a KnownNat (n-1) constraint from a KnownNat n constraint

To use the plugin, add the

OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver

Pragma to the header of your file.


[Skip to Readme]

Flags

Manual Flags

NameDescriptionDefault
deverror

Enables `-Werror` for development mode and TravisCI

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1, 0.1.1, 0.2, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.3, 0.3.1, 0.4, 0.4.1, 0.4.2, 0.5, 0.5.1, 0.6, 0.7, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.7.7, 0.7.8, 0.7.9, 0.7.10
Change log CHANGELOG.md
Dependencies base (>=4.9 && <4.10), ghc (>=8.0.1 && <8.2), ghc-tcplugins-extra (>=0.2) [details]
License BSD-2-Clause
Copyright Copyright © 2016 University of Twente
Author Christiaan Baaij
Maintainer christiaan.baaij@gmail.com
Category Type System
Home page http://clash-lang.org/
Source repo head: git clone https://github.com/clash-lang/ghc-typelits-knownnat.git
Uploaded by ChristiaanBaaij at 2016-08-10T17:41:44Z
Distributions Arch:0.7.8, LTSHaskell:0.7.10, NixOS:0.7.10, Stackage:0.7.10
Reverse Dependencies 31 direct, 30 indirect [details]
Downloads 20742 total (180 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for ghc-typelits-knownnat-0.1

[back to package description]

ghc-typelits-knownnat

Build Status Hackage Hackage Dependencies

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 only derive KnownNat constraints consisting of:

  • Type-level naturals
  • Type variables
  • Applications of the arithmetic expression: {+,*,^}.

i.e. it cannot derive a KnownNat (n-1) constraint from a KnownNat n constraint

To use the plugin, add the

OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver

Pragma to the header of your file.