{-# LANGUAGE TemplateHaskell #-}
module TypeLevel.Number.Nat.Num where

import TypeLevel.Number.Nat

-- type N0 = $(natT 0)
-- type N1 = $(natT 1)
-- type N2 = $(natT 2)
-- type N3 = $(natT 3)
-- type N4 = $(natT 4)
-- type N5 = $(natT 5)
-- type N6 = $(natT 6)
-- type N7 = $(natT 7)
-- type N8 = $(natT 8)
-- type N9 = $(natT 9)

-- Workaround for GHC bug #4364
--   http://hackage.haskell.org/trac/ghc/ticket/4364
type N0 =            Z
type N1 =          I Z
type N2 =       O (I Z)
type N3 =       I (I Z)
type N4 =    O (O (I Z))
type N5 =    I (O (I Z))
type N6 =    O (I (I Z))
type N7 =    I (I (I Z))
type N8 = O (O (O (I Z)))
type N9 = I (O (O (I Z)))

n0 :: N0; n0 = undefined
n1 :: N1; n1 = undefined
n2 :: N2; n2 = undefined
n3 :: N3; n3 = undefined
n4 :: N4; n4 = undefined
n5 :: N5; n5 = undefined
n6 :: N6; n6 = undefined
n7 :: N7; n7 = undefined
n8 :: N8; n8 = undefined
n9 :: N9; n9 = undefined