diff --git a/Data/NaturalNumber.hs b/Data/NaturalNumber.hs
new file mode 100644
--- /dev/null
+++ b/Data/NaturalNumber.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE GADTs #-}
+
+module Data.NaturalNumber where
+
+import Data.Typeable
+import Data.Type.Equality
+
+import TypeLevel.NaturalNumber hiding (NaturalNumber)
+import qualified TypeLevel.NaturalNumber as TLN
+import TypeLevel.NaturalNumber.Induction
+
+data N a where
+    NZero :: N Zero
+    NSuccessorTo :: N n -> N (SuccessorTo n)
+
+data UnknownN where
+    UnknownN :: NaturalNumber n => N n -> UnknownN
+
+class (TLN.NaturalNumber n, Induction n) => NaturalNumber n where
+    asN :: N n
+    fromN :: N n -> n
+instance NaturalNumber Zero where
+    asN = NZero
+    fromN _ = undefined
+instance NaturalNumber n => NaturalNumber (SuccessorTo n) where
+    asN = NSuccessorTo asN
+    fromN _ = undefined
+
+instance NaturalNumber n => Typeable (N n) where
+    typeOf n = mkTyConApp (mkTyCon $ "N#" ++ (show . naturalNumberAsInt . fromN) n) []
+
+instance Show (N n) where
+    show = show . nToInt
+
+instance Show UnknownN where
+    show (UnknownN n) = show n
+
+instance Eq (N n) where
+    (==) _ _ = True
+    (/=) _ _ = False
+
+instance EqT N where
+    eqT NZero NZero = Just Refl
+    eqT (NSuccessorTo m) (NSuccessorTo n) =
+        case m `eqT` n of
+             Just Refl -> Just Refl
+             Nothing -> Nothing
+    eqT _ _ = Nothing
+
+nToInt :: N n -> Int
+nToInt NZero = 0
+nToInt (NSuccessorTo n) = 1 + nToInt n
+
+unknownNToInt :: UnknownN -> Int
+unknownNToInt (UnknownN n) = nToInt n
+
+intToUnknownN :: Int -> UnknownN
+intToUnknownN i
+  | i < 0 = error $ "Cannot convert negative number " ++ show i ++ " to a natural number."
+  | otherwise = go i
+  where
+    go 0 = UnknownN NZero
+    go i = case go (i-1) of UnknownN n -> UnknownN (NSuccessorTo n)
+
+intToN :: NaturalNumber n => Int -> N n
+intToN i
+  | i == nToInt n = n
+  | otherwise = error $ show i ++ " /= " ++ show n
+  where n = asN
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2010, Gregory M. Crosswhite
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/natural-number.cabal b/natural-number.cabal
new file mode 100644
--- /dev/null
+++ b/natural-number.cabal
@@ -0,0 +1,23 @@
+Name:                natural-number
+Version:             1.0
+License:             BSD3
+License-file:        LICENSE
+Author:              Gregory Crosswhite
+Maintainer:          Gregory Crosswhite <gcross@phys.washington.edu>
+Stability:           Provisional
+Synopsis:            Natural numbers tagged with a type-level representation of the number.
+Description:         This package provides a simple data structure for
+                     repesenting natural numbers with a type that is tagged
+     	             with the type-level natural number corresponding to the
+                     value of the natural number.
+Cabal-version:       >=1.2.3
+Build-type:          Simple
+Category:	     Type System,Data
+
+Library
+    Build-depends:   base >= 3 && < 5,
+                     type-level-natural-number >= 1.0 && < 1.2,
+                     type-level-natural-number-induction >= 1.0 && < 1.1,
+                     type-equality >= 0.1 && < 0.2
+    Exposed-modules: Data.NaturalNumber
+    Extensions:	     GADTs
