{-# LANGUAGE CPP #-}
#ifdef LANGUAGE_DataKinds
{-# LANGUAGE DataKinds, KindSignatures #-}
#else
{-# LANGUAGE EmptyDataDecls #-}
#endif
{- |
Copyright   :  (c) Andy Sonnenburg 2013
License     :  BSD3
Maintainer  :  andy22286@gmail.com
-}
module Type.Nat
       (
#ifdef LANGUAGE_DataKinds
         Nat (..)
#else
         Z, S
#endif
       , N0, N1, N2, N3, N4, N5, N6, N7, N8
       ) where

#ifdef LANGUAGE_DataKinds
data Nat = Z | S Nat
#else
data Z
data S a
#endif

type N0 = Z
type N1 = S N0
type N2 = S N1
type N3 = S N2
type N4 = S N3
type N5 = S N4
type N6 = S N5
type N7 = S N6
type N8 = S N7