diff --git a/genvalidity-text.cabal b/genvalidity-text.cabal
--- a/genvalidity-text.cabal
+++ b/genvalidity-text.cabal
@@ -1,5 +1,5 @@
 name:                genvalidity-text
-version:             0.1.0.1
+version:             0.2.0.0
 synopsis:            GenValidity support for Text
 description:         Please see README.md
 homepage:            https://github.com/NorfairKing/validity#readme
diff --git a/src/Data/GenValidity/Text.hs b/src/Data/GenValidity/Text.hs
--- a/src/Data/GenValidity/Text.hs
+++ b/src/Data/GenValidity/Text.hs
@@ -1,63 +1,71 @@
 module Data.GenValidity.Text where
 
-import           Data.GenValidity
-import           Data.Validity.Text ()
-
-import           Test.QuickCheck
+import Data.GenValidity
+import Data.Validity.Text ()
 
-import           Control.Monad
+import Test.QuickCheck
 
-import qualified Data.Text.Array    as A
-import           Data.Text.Internal (Text(..))
-import qualified Data.Text          as T
+import Control.Monad
 
+import qualified Data.Text as T
+import qualified Data.Text.Array as A
+import Data.Text.Internal (Text(..))
 
-instance GenValidity Text where
+instance GenUnchecked Text where
     genUnchecked = Text <$> uncheckedArray <*> arbitrary <*> arbitrary
       where
-        uncheckedArray = sized $ \n -> do
+        uncheckedArray =
+            sized $ \n -> do
+                size <- upTo n
+                ins <- replicateM size arbitrary
+                return $
+                    A.run $ do
+                        arr <- A.new size
+                        forM_ (zip [0 ..] ins) $ uncurry $ A.unsafeWrite arr
+                        return arr
+
+instance GenValid Text where
+    genValid =
+        sized $ \n -> do
             size <- upTo n
-            ins <- replicateM size arbitrary
-            return $ A.run $ do
-              arr <- A.new size
-              forM_ (zip [0..] ins) $ uncurry $ A.unsafeWrite arr
-              return arr
+            chars <- resize size $ genListOf arbitrary
+            return $ T.pack chars
 
-    genValid = sized $ \n -> do
-        size <- upTo n
-        chars <- resize size $ genListOf arbitrary
-        return $ T.pack chars
+instance GenInvalid Text
 
+-- | 'textStartingWith c' generates a 'Text' value that starts with 'c'.
 textStartingWith :: Char -> Gen Text
-textStartingWith c = sized $ \n ->
-    case n of
-        0 -> pure $ T.singleton c
-        1 -> pure $ T.singleton c
-        _ -> do
-            rest <- resize (n - 1) genValid
-            return $ T.cons c rest
+textStartingWith c =
+    sized $ \n ->
+        case n of
+            0 -> pure $ T.singleton c
+            1 -> pure $ T.singleton c
+            _ -> do
+                rest <- resize (n - 1) genValid
+                return $ T.cons c rest
 
+-- | 'textStartingWith g' generates a 'Text' value that contains a substring generated by 'g'.
 textWith :: Gen Text -> Gen Text
-textWith gen = sized $ \n -> do
-    (b, m, a) <- genSplit3 n
-    before <- resize b genValid
-    middle <- resize m gen
-    after  <- resize a genValid
-    return $ T.concat [before, middle, after]
+textWith gen =
+    sized $ \n -> do
+        (b, m, a) <- genSplit3 n
+        before <- resize b genValid
+        middle <- resize m gen
+        after <- resize a genValid
+        return $ T.concat [before, middle, after]
 
+-- | 'textStartingWith c' generates a 'Text' value that contains a 'c'.
 textWithA :: Char -> Gen Text
 textWithA c = textWith $ T.singleton <$> pure c
 
+-- | 'textWithoutAny c' generates a 'Text' value that does not contain any 'c'.
 textWithoutAny :: Char -> Gen Text
 textWithoutAny c = textWithoutAnyOf [c]
 
-textWithoutAnyOf :: String -> Gen Text
+-- | 'textWithoutAnyOf c' generates a 'Text' value that does not contain any character in 'ls'.
+textWithoutAnyOf :: [Char] -> Gen Text
 textWithoutAnyOf cs = T.pack <$> genListOf (arbitrary `suchThat` (`notElem` cs))
 
+-- | 'textAllCaps' generates a 'Text' value with only upper-case characters.
 textAllCaps :: Gen Text
 textAllCaps = T.toUpper <$> genValid
-
-
-
-
-
