[Haskell-cafe] induction on type-level Nat

Henning Thielemann lemming at henning-thielemann.de
Fri Jan 13 18:04:20 UTC 2023

I want to define a list with type-level Nat length:

type family List (n::Nat) :: Type -> Type where
    List 0 = End
    List n = Cons (List (n-1))

data End a = End
data Cons f a = Cons { head :: a, tail :: f a }

But this way, GHC cannot match ‘List (n+1)’ with ‘Cons (List n)’, also not 
with the magic type checker plugings suggested before.

I guess I need a another way to define List or some support for the type 
checker to accept List (n+1) ~ Cons (List n).

More information about the Haskell-Cafe mailing list