diff --git a/changelog.txt b/changelog.txt
new file mode 100644
--- /dev/null
+++ b/changelog.txt
@@ -0,0 +1,2 @@
+v1 - Initial release
+v1.0.0.1 - Added tests, added a few examples to the docs
diff --git a/nat-optics.cabal b/nat-optics.cabal
--- a/nat-optics.cabal
+++ b/nat-optics.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.0
 
 name: nat-optics
-version: 1
+version: 1.0.0.1
 category: Numeric, Optics
 
 synopsis:
@@ -13,8 +13,9 @@
     - "NatOptics.NonNegative" includes 0, 1, 2, 3, ...
     - "NatOptics.Positive" includes 1, 2, 3, 4, ...
 
-    You probably also want to import the "Optics" module
-    from the `optics` package.
+    The modules in this package re-export some optics functions
+    to cover basic usage, but you probably also want to import
+    the "Optics" module from the `optics` package.
 
 copyright: 2021 Mission Valley Software LLC
 license: MIT
@@ -28,28 +29,49 @@
 
 build-type: Simple
 
+extra-source-files: changelog.txt
+
 source-repository head
   type: git
   location: https://github.com/typeclasses/nat-optics
 
-library
-    default-language: Haskell2010
-    ghc-options: -Wall
-    hs-source-dirs: src
+common language
+    default-language:   Haskell2010
+    ghc-options:        -Wall
+    default-extensions: DerivingStrategies
+                      , GeneralizedNewtypeDeriving
+                      , NoImplicitPrelude
+                      , TypeApplications
 
-    default-extensions:
-        DerivingStrategies
-        GeneralizedNewtypeDeriving
-        NoImplicitPrelude
+common dependencies
+    build-depends:      base        ^>= 4.14 || ^>= 4.15
+                      , text        ^>= 1.2.3
+                      , optics-core ^>= 0.4
 
-    exposed-modules:
-        NatOptics.NonNegative
-        NatOptics.Positive
+common test
+    import:             language
+                      , dependencies
+    default-extensions: TemplateHaskell
+    build-depends:      hedgehog ^>= 1.0.4
+                      , nat-optics
+    other-modules:      TestPrelude
 
-    other-modules:
-        NatOptics.Internal
+library
+    import:             language
+                      , dependencies
+    hs-source-dirs:     src
+    exposed-modules:    NatOptics.NonNegative
+                      , NatOptics.Positive
+    other-modules:      NatOptics.Internal
 
-    build-depends:
-        base        ^>= 4.14 || ^>= 4.15
-      , text        ^>= 1.2.3
-      , optics-core ^>= 0.4
+test-suite NonNegative
+    import:             test
+    type:               exitcode-stdio-1.0
+    hs-source-dirs:     test
+    main-is:            NonNegative.hs
+
+test-suite Positive
+    import:             test
+    type:               exitcode-stdio-1.0
+    hs-source-dirs:     test
+    main-is:            Positive.hs
diff --git a/src/NatOptics/NonNegative.hs b/src/NatOptics/NonNegative.hs
--- a/src/NatOptics/NonNegative.hs
+++ b/src/NatOptics/NonNegative.hs
@@ -35,7 +35,15 @@
     deriving newtype (Eq, Ord, Show)
 
 {- | For any numeric type @n@,
-     @'NonNegative' n@ is a subset of @n@. -}
+     @'NonNegative' n@ is a subset of @n@.
+
+Examples:
+
+- @'preview' 'refine' (-1 :: 'Integer')@ = @'Nothing'@
+- @'preview' 'refine' (0 :: 'Integer')@ = @'Just' (NonNegative 0)@
+- @'preview' 'refine' (1 :: 'Integer')@ = @'Just' (NonNegative 1)@
+- @'preview' 'refine' (2 :: 'Integer')@ = @'Just' (NonNegative 2)@
+-}
 refine :: (Num n, Ord n) => Prism' n (NonNegative n)
 refine = prism' number verify
 
diff --git a/src/NatOptics/Positive.hs b/src/NatOptics/Positive.hs
--- a/src/NatOptics/Positive.hs
+++ b/src/NatOptics/Positive.hs
@@ -34,7 +34,15 @@
     deriving newtype (Eq, Ord, Show)
 
 {- | For any numeric type @n@,
-     @'Positive' n@ is a subset of @n@.-}
+     @'Positive' n@ is a subset of @n@.
+
+Examples:
+
+- @'preview' 'refine' (-1 :: 'Integer')@ = @'Nothing'@
+- @'preview' 'refine' (0 :: 'Integer')@ = @'Nothing'@
+- @'preview' 'refine' (1 :: 'Integer')@ = @'Just' (Positive 1)@
+- @'preview' 'refine' (2 :: 'Integer')@ = @'Just' (Positive 2)@
+-}
 refine :: (Num n, Ord n) => Prism' n (Positive n)
 refine = prism' number verify
 
diff --git a/test/NonNegative.hs b/test/NonNegative.hs
new file mode 100644
--- /dev/null
+++ b/test/NonNegative.hs
@@ -0,0 +1,28 @@
+module Main (main) where
+
+import NatOptics.NonNegative
+import TestPrelude
+
+main :: IO ()
+main =
+  do
+    okay <- checkParallel $$(discover)
+    when (not okay) exitFailure
+
+prop_examples :: Property
+prop_examples = withTests 1 $ property $
+  do
+    evalMaybe (preview (stringPrism @Int32) "0") >>= \n ->
+      do
+        review refine      n === 0
+        review stringPrism n === "0"
+
+    evalMaybe (preview (stringPrism @Int32) "57") >>= \n ->
+      do
+        review refine      n === 57
+        review stringPrism n === "57"
+
+    traverse_
+        (\x -> preview (stringPrism @Int32) x === Nothing )
+        [ "-0", "-1", "00", "𝟝𝟟", "57 ", "057"
+        , "9999999999999999999999999999" ]
diff --git a/test/Positive.hs b/test/Positive.hs
new file mode 100644
--- /dev/null
+++ b/test/Positive.hs
@@ -0,0 +1,28 @@
+module Main (main) where
+
+import NatOptics.Positive
+import TestPrelude
+
+main :: IO ()
+main =
+  do
+    okay <- checkParallel $$(discover)
+    when (not okay) exitFailure
+
+prop_examples :: Property
+prop_examples = withTests 1 $ property $
+  do
+    evalMaybe (preview (stringPrism @Int16) "1") >>= \n ->
+      do
+        review refine      n === 1
+        review stringPrism n === "1"
+
+    evalMaybe (preview (stringPrism @Int16) "57") >>= \n ->
+      do
+        review refine      n === 57
+        review stringPrism n === "57"
+
+    traverse_
+        (\x -> preview (stringPrism @Int16) x === Nothing )
+        [ "0", "-0", "-1", "00", "𝟝𝟟", "57 ", "057"
+        , "99999999999999999999999" ]
diff --git a/test/TestPrelude.hs b/test/TestPrelude.hs
new file mode 100644
--- /dev/null
+++ b/test/TestPrelude.hs
@@ -0,0 +1,10 @@
+module TestPrelude (module X) where
+
+import Control.Monad as X
+import Data.Foldable as X
+import Data.Int as X
+import Hedgehog as X
+import Optics.Optic as X
+import Optics.Re as X
+import Prelude as X
+import System.Exit as X
