[Haskell-cafe] Current state of type-level natural number programming

Henning Thielemann lemming at henning-thielemann.de
Wed Jan 11 14:55:15 UTC 2023


Almost ten years ago I tried to convert the package llvm-tf to use 
type-level naturals but it did not lead very far.

What is the current state of type-level natural number programming and 
reasoning?

I need type-level naturals for vectors of static size.
The type checker must know things like:

n+n ~ 2*n
n*m ~ m*n

(Pos - positive natural number)
n::Nat, m::Pos -> n+m :: Pos
n::Nat, m::Pos -> n*m :: Nat
n::Pos, m::Pos -> n*m :: Pos


I need to access an element from a heterogeneous list with a typenat 
index. That is, I need a kind of induction.


I know of ghc-typelits-natnormalise, but it has some problems with 
inequalities that I need:

"Could not deduce n~0 from the context n<=0"

https://github.com/clash-lang/ghc-typelits-natnormalise/issues/33


"Could not deduce: (n0 + 1) ~ m from the context: 1 <= m"

https://github.com/clash-lang/ghc-typelits-natnormalise/issues/59



So, what is the current state of the art? What libraries, what GHC 
extensions? Any tutorials?


More information about the Haskell-Cafe mailing list