Hi all,
I'm trying to change type-level Nat to Integer as following:
{-# LANGUAGE DataKinds, KindSignatures, GADTs, PolyKinds #-}
data Nat = Z | S Nat
class NatToInt n where
natToInt :: n -> Int
instance NatToInt Z where
natToInt _ = 0
instance NatToInt (S n) where
natToInt = 1 + natToInt (undefined :: n)
I understand why it fails (Z and S have not the right kind).
How to specify that NatToInt is Nat-specific?
Moreover, if you have any advanced explanations/links which could give me a deeper understanding on what going on, I'll take them.
Thanks in advance for your help.