diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,12 @@
-## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.0.0.0...main)
+## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.1.0.0...main)
+
+## [v0.1.0.0](https://github.com/freckle/nonempty-zipper/compare/v0.0.0.0...v0.1.0.0)
+
+The parameter of `DebugPrintValueInt` is changed from `Int` to `Integer`.
+
+Added `ToDebugPrintValue` instances for various numeric types.
+
+Adds the `DebugInteger` newtype for deriving-via.
 
 ## [v0.0.0.0](https://github.com/freckle/debug-print/tree/v0.0.0.0)
 
diff --git a/debug-print.cabal b/debug-print.cabal
--- a/debug-print.cabal
+++ b/debug-print.cabal
@@ -1,6 +1,6 @@
-cabal-version:   1.18
+cabal-version:   2.0
 name:            debug-print
-version:         0.0.0.0
+version:         0.1.0.0
 license:         MIT
 license-file:    LICENSE
 maintainer:      Freckle Education
@@ -22,12 +22,14 @@
         DebugPrint
         DebugPrint.Aeson
         DebugPrint.Class
+        DebugPrint.Integer
         DebugPrint.Show
         DebugPrint.Tagged
         DebugPrint.Types
 
     hs-source-dirs:     library
     other-modules:      Paths_debug_print
+    autogen-modules:    Paths_debug_print
     default-language:   GHC2021
     default-extensions:
         DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
@@ -43,6 +45,32 @@
         aeson >=2.2.3.0,
         base >=4.19.2.0 && <5,
         containers >=0.6.8,
+        internal,
+        text >=2.1.1
+
+    if impl(ghc >=9.8)
+        ghc-options:
+            -Wno-missing-role-annotations -Wno-missing-poly-kind-signatures
+
+library internal
+    exposed-modules:    DebugPrint.Core
+    hs-source-dirs:     internal
+    other-modules:      Paths_debug_print
+    autogen-modules:    Paths_debug_print
+    default-language:   GHC2021
+    default-extensions:
+        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
+        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings
+        StrictData
+
+    ghc-options:
+        -Weverything -Wno-all-missed-specialisations
+        -Wno-missing-import-lists -Wno-missing-kind-signatures
+        -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe
+
+    build-depends:
+        base >=4.19.2.0 && <5,
+        containers >=0.6.8,
         text >=2.1.1,
         vector >=0.13.2.0
 
@@ -54,6 +82,7 @@
     type:               exitcode-stdio-1.0
     main-is:            README.lhs
     other-modules:      Paths_debug_print
+    autogen-modules:    Paths_debug_print
     default-language:   GHC2021
     default-extensions:
         DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
diff --git a/internal/DebugPrint/Core.hs b/internal/DebugPrint/Core.hs
new file mode 100644
--- /dev/null
+++ b/internal/DebugPrint/Core.hs
@@ -0,0 +1,157 @@
+module DebugPrint.Core
+  ( DebugPrintRecord (..)
+  , DebugPrintValue (..)
+  , ToDebugPrintValue (..)
+  , ToDebugPrintRecord (..)
+  , ToDebugPrintValueRep
+  , ToDebugPrintRecordRep
+  , DebugInteger (..)
+  , DebugShow (..)
+  ) where
+
+import Prelude
+
+import Data.Foldable (toList)
+import Data.Int
+import Data.Kind (Type)
+import Data.List.NonEmpty (NonEmpty)
+import Data.Map (Map)
+import Data.Map.Strict qualified as Map
+import Data.Sequence (Seq)
+import Data.String (IsString (..))
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Text.Lazy qualified as TL
+import Data.Vector (Vector)
+import Data.Vector qualified as V
+import Data.Word
+import GHC.Generics
+import Numeric.Natural (Natural)
+
+newtype DebugPrintRecord = DebugPrintRecord (Map Text DebugPrintValue)
+  deriving newtype (Monoid, Semigroup)
+
+data DebugPrintValue
+  = DebugPrintValueInt Integer
+  | DebugPrintValueText Text
+  | DebugPrintValueBool Bool
+  | DebugPrintValueVector (Vector DebugPrintValue)
+  | DebugPrintValueRecord DebugPrintRecord
+
+instance IsString DebugPrintValue where
+  fromString = DebugPrintValueText . T.pack
+
+---
+
+class ToDebugPrintValue a where
+  toDebugPrintValue :: a -> DebugPrintValue
+  default toDebugPrintValue
+    :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintValue
+  toDebugPrintValue = DebugPrintValueRecord . gToRecord . from
+
+instance ToDebugPrintValue DebugPrintValue where
+  toDebugPrintValue = id
+
+instance ToDebugPrintValue Integer where
+  toDebugPrintValue = DebugPrintValueInt
+
+deriving via DebugInteger (Natural) instance ToDebugPrintValue Natural
+deriving via DebugInteger (Int) instance ToDebugPrintValue Int
+deriving via DebugInteger (Int8) instance ToDebugPrintValue Int8
+deriving via DebugInteger (Int16) instance ToDebugPrintValue Int16
+deriving via DebugInteger (Int32) instance ToDebugPrintValue Int32
+deriving via DebugInteger (Int64) instance ToDebugPrintValue Int64
+deriving via DebugInteger (Word) instance ToDebugPrintValue Word
+deriving via DebugInteger (Word8) instance ToDebugPrintValue Word8
+deriving via DebugInteger (Word16) instance ToDebugPrintValue Word16
+deriving via DebugInteger (Word32) instance ToDebugPrintValue Word32
+deriving via DebugInteger (Word64) instance ToDebugPrintValue Word64
+
+instance ToDebugPrintValue Char where
+  toDebugPrintValue = DebugPrintValueText . T.singleton
+
+instance ToDebugPrintValue T.Text where
+  toDebugPrintValue = DebugPrintValueText
+
+instance ToDebugPrintValue TL.Text where
+  toDebugPrintValue = DebugPrintValueText . TL.toStrict
+
+instance ToDebugPrintValue Bool where
+  toDebugPrintValue = DebugPrintValueBool
+
+instance ToDebugPrintValue a => ToDebugPrintValue (Maybe a) where
+  toDebugPrintValue = toDebugPrintValue . toList
+
+instance ToDebugPrintValue a => ToDebugPrintValue [a] where
+  toDebugPrintValue = toDebugPrintValue . V.fromList
+
+instance ToDebugPrintValue a => ToDebugPrintValue (NonEmpty a) where
+  toDebugPrintValue = toDebugPrintValue . toList
+
+instance ToDebugPrintValue a => ToDebugPrintValue (Seq a) where
+  toDebugPrintValue = toDebugPrintValue . toList
+
+instance ToDebugPrintValue a => ToDebugPrintValue (Vector a) where
+  toDebugPrintValue = DebugPrintValueVector . fmap toDebugPrintValue
+
+---
+
+class ToDebugPrintRecord a where
+  toDebugPrintRecord :: a -> DebugPrintRecord
+  default toDebugPrintRecord
+    :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintRecord
+  toDebugPrintRecord = gToRecord . from
+
+instance ToDebugPrintRecord DebugPrintRecord where
+  toDebugPrintRecord = id
+
+---
+
+class ToDebugPrintValueRep (f :: Type -> Type) where
+  gToValue :: f a -> DebugPrintValue
+
+instance ToDebugPrintValue a => ToDebugPrintValueRep (K1 i a) where
+  gToValue (K1 x) = toDebugPrintValue x
+
+---
+
+class ToDebugPrintRecordRep (f :: Type -> Type) where
+  gToRecord :: f a -> DebugPrintRecord
+
+instance ToDebugPrintRecordRep U1 where
+  gToRecord _ = DebugPrintRecord mempty
+
+instance
+  (ToDebugPrintRecordRep f, ToDebugPrintRecordRep g)
+  => ToDebugPrintRecordRep (f :*: g)
+  where
+  gToRecord (x :*: y) = gToRecord x <> gToRecord y
+
+instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (D1 i f) where
+  gToRecord (M1 x) = gToRecord x
+
+instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (C1 i f) where
+  gToRecord (M1 x) = gToRecord x
+
+instance (Selector s, ToDebugPrintValueRep f) => ToDebugPrintRecordRep (S1 s f) where
+  gToRecord s1@(M1 x) = DebugPrintRecord $ Map.singleton (T.pack (selName s1)) (gToValue x)
+
+---
+
+-- | For use with deriving-via, provides a simple 'ToDebugPrintValue'
+--   instance based on 'Show' which renders as text
+newtype DebugShow a = DebugShow a
+
+instance Show a => ToDebugPrintValue (DebugShow a) where
+  toDebugPrintValue (DebugShow x) =
+    toDebugPrintValue $ T.pack $ show x
+
+---
+
+-- | For use with deriving-via, provides a simple 'ToDebugPrintValue'
+--   instance based on 'toInteger' which renders as an integer
+newtype DebugInteger a = DebugInteger a
+
+instance Integral a => ToDebugPrintValue (DebugInteger a) where
+  toDebugPrintValue (DebugInteger x) =
+    toDebugPrintValue $ toInteger x
diff --git a/library/DebugPrint/Class.hs b/library/DebugPrint/Class.hs
--- a/library/DebugPrint/Class.hs
+++ b/library/DebugPrint/Class.hs
@@ -9,101 +9,4 @@
   , ToDebugPrintRecordRep
   ) where
 
-import Prelude
-
-import Data.Foldable (toList)
-import Data.Kind (Type)
-import Data.List.NonEmpty (NonEmpty)
-import Data.Map.Strict qualified as Map
-import Data.Sequence (Seq)
-import Data.Text qualified as T
-import Data.Text.Lazy qualified as TL
-import Data.Vector (Vector)
-import Data.Vector qualified as V
-import DebugPrint.Types
-import GHC.Generics
-import Numeric.Natural (Natural)
-
-class ToDebugPrintValue a where
-  toDebugPrintValue :: a -> DebugPrintValue
-  default toDebugPrintValue
-    :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintValue
-  toDebugPrintValue = DebugPrintValueRecord . gToRecord . from
-
-instance ToDebugPrintValue DebugPrintValue where
-  toDebugPrintValue = id
-
-instance ToDebugPrintValue Int where
-  toDebugPrintValue = DebugPrintValueInt
-
-instance ToDebugPrintValue Char where
-  toDebugPrintValue = DebugPrintValueText . T.singleton
-
-instance ToDebugPrintValue Natural where
-  toDebugPrintValue = DebugPrintValueInt . fromIntegral
-
-instance ToDebugPrintValue T.Text where
-  toDebugPrintValue = DebugPrintValueText
-
-instance ToDebugPrintValue TL.Text where
-  toDebugPrintValue = DebugPrintValueText . TL.toStrict
-
-instance ToDebugPrintValue Bool where
-  toDebugPrintValue = DebugPrintValueBool
-
-instance ToDebugPrintValue a => ToDebugPrintValue (Maybe a) where
-  toDebugPrintValue = toDebugPrintValue . toList
-
-instance ToDebugPrintValue a => ToDebugPrintValue [a] where
-  toDebugPrintValue = toDebugPrintValue . V.fromList
-
-instance ToDebugPrintValue a => ToDebugPrintValue (NonEmpty a) where
-  toDebugPrintValue = toDebugPrintValue . toList
-
-instance ToDebugPrintValue a => ToDebugPrintValue (Seq a) where
-  toDebugPrintValue = toDebugPrintValue . toList
-
-instance ToDebugPrintValue a => ToDebugPrintValue (Vector a) where
-  toDebugPrintValue = DebugPrintValueVector . fmap toDebugPrintValue
-
----
-
-class ToDebugPrintRecord a where
-  toDebugPrintRecord :: a -> DebugPrintRecord
-  default toDebugPrintRecord
-    :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintRecord
-  toDebugPrintRecord = gToRecord . from
-
-instance ToDebugPrintRecord DebugPrintRecord where
-  toDebugPrintRecord = id
-
----
-
-class ToDebugPrintValueRep (f :: Type -> Type) where
-  gToValue :: f a -> DebugPrintValue
-
-instance ToDebugPrintValue a => ToDebugPrintValueRep (K1 i a) where
-  gToValue (K1 x) = toDebugPrintValue x
-
----
-
-class ToDebugPrintRecordRep (f :: Type -> Type) where
-  gToRecord :: f a -> DebugPrintRecord
-
-instance ToDebugPrintRecordRep U1 where
-  gToRecord _ = DebugPrintRecord mempty
-
-instance
-  (ToDebugPrintRecordRep f, ToDebugPrintRecordRep g)
-  => ToDebugPrintRecordRep (f :*: g)
-  where
-  gToRecord (x :*: y) = gToRecord x <> gToRecord y
-
-instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (D1 i f) where
-  gToRecord (M1 x) = gToRecord x
-
-instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (C1 i f) where
-  gToRecord (M1 x) = gToRecord x
-
-instance (Selector s, ToDebugPrintValueRep f) => ToDebugPrintRecordRep (S1 s f) where
-  gToRecord s1@(M1 x) = DebugPrintRecord $ Map.singleton (T.pack (selName s1)) (gToValue x)
+import DebugPrint.Core
diff --git a/library/DebugPrint/Integer.hs b/library/DebugPrint/Integer.hs
new file mode 100644
--- /dev/null
+++ b/library/DebugPrint/Integer.hs
@@ -0,0 +1,5 @@
+module DebugPrint.Integer
+  ( DebugInteger (..)
+  ) where
+
+import DebugPrint.Core
diff --git a/library/DebugPrint/Show.hs b/library/DebugPrint/Show.hs
--- a/library/DebugPrint/Show.hs
+++ b/library/DebugPrint/Show.hs
@@ -2,15 +2,4 @@
   ( DebugShow (..)
   ) where
 
-import Prelude
-
-import Data.Text qualified as T
-import DebugPrint.Class
-
--- | For use with deriving-via, provides a simple 'ToDebugPrintValue'
---   instance based on 'Show' which renders as text
-newtype DebugShow a = DebugShow a
-
-instance Show a => ToDebugPrintValue (DebugShow a) where
-  toDebugPrintValue (DebugShow x) =
-    toDebugPrintValue $ T.pack $ show x
+import DebugPrint.Core
diff --git a/library/DebugPrint/Types.hs b/library/DebugPrint/Types.hs
--- a/library/DebugPrint/Types.hs
+++ b/library/DebugPrint/Types.hs
@@ -7,23 +7,4 @@
   , DebugPrintValue (..)
   ) where
 
-import Prelude
-
-import Data.Map (Map)
-import Data.String (IsString (..))
-import Data.Text (Text)
-import Data.Text qualified as T
-import Data.Vector (Vector)
-
-newtype DebugPrintRecord = DebugPrintRecord (Map Text DebugPrintValue)
-  deriving newtype (Monoid, Semigroup)
-
-data DebugPrintValue
-  = DebugPrintValueInt Int
-  | DebugPrintValueText Text
-  | DebugPrintValueBool Bool
-  | DebugPrintValueVector (Vector DebugPrintValue)
-  | DebugPrintValueRecord DebugPrintRecord
-
-instance IsString DebugPrintValue where
-  fromString = DebugPrintValueText . T.pack
+import DebugPrint.Core
