{-# 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 :: N0
n0 = N0
forall a. HasCallStack => a
undefined
n1 :: N1; n1 :: N1
n1 = N1
forall a. HasCallStack => a
undefined
n2 :: N2; n2 :: N2
n2 = N2
forall a. HasCallStack => a
undefined
n3 :: N3; n3 :: N3
n3 = N3
forall a. HasCallStack => a
undefined
n4 :: N4; n4 :: N4
n4 = N4
forall a. HasCallStack => a
undefined
n5 :: N5; n5 :: N5
n5 = N5
forall a. HasCallStack => a
undefined
n6 :: N6; n6 :: N6
n6 = N6
forall a. HasCallStack => a
undefined
n7 :: N7; n7 :: N7
n7 = N7
forall a. HasCallStack => a
undefined
n8 :: N8; n8 :: N8
n8 = N8
forall a. HasCallStack => a
undefined
n9 :: N9; n9 :: N9
n9 = N9
forall a. HasCallStack => a
undefined