typelevel-1.0.4: src/Type/Sequence.hs
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE UndecidableInstances #-}
module Type.Sequence where
import Prelude
import GHC.TypeLits
type family Succ (a :: k) :: k
type instance Succ (a :: Nat) = a + 1
type family Empty :: k
type instance Empty = '[]
type family Zero :: k
type instance Zero = 0
type family Range (begin :: k) (end :: k) :: [k] where
Range b b = Empty
Range b e = b ': Range (Succ b) e
type family Enumerate end where Enumerate end = Range Zero end -- Implemented as TF because #11375