diff --git a/sqlite-simple-errors.cabal b/sqlite-simple-errors.cabal
--- a/sqlite-simple-errors.cabal
+++ b/sqlite-simple-errors.cabal
@@ -1,7 +1,8 @@
 name:                sqlite-simple-errors
-version:             0.3.0.0
+version:             0.4.0.0
 synopsis:            Wrapper around errors from sqlite-simple
-description:         Wrapper around errors from sqlite-simple
+description:         Wrapper around errors from sqlite-simple. Get easy-to-pattern-match
+                     data types for constraint errors.
 homepage:            https://github.com/caneroj1/sqlite-simple-errors
 license:             BSD3
 license-file:        LICENSE
@@ -18,10 +19,10 @@
   exposed-modules:     Database.SQLite.SimpleErrors
                      , Database.SQLite.SimpleErrors.Parser
                      , Database.SQLite.SimpleErrors.Types
-  build-depends:       base >= 4.7 && < 5
+  build-depends:       base          >= 4.6   && < 5
                      , sqlite-simple >= 0.4.9 && < 0.5.0
-                     , text >= 1.2.2.1 && < 1.2.3
-                     , parsec >= 3.1.11 && < 3.2
+                     , text          >= 1.2   && < 1.2.3
+                     , parsec        >= 3.1.9 && < 3.2
   default-language:    Haskell2010
 
 test-suite sqlite-simple-errors-test
@@ -33,8 +34,8 @@
   build-depends:       base
                      , sqlite-simple-errors
                      , sqlite-simple >= 0.4.9 && < 0.5.0
-                     , text >= 1.2.2.1 && < 1.2.3
-                     , mtl >= 2.2.1 && < 2.3
+                     , text          >= 1.2   && < 1.2.3
+                     , mtl           >= 2.1   && < 2.3
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
   default-language:    Haskell2010
 
diff --git a/src/Database/SQLite/SimpleErrors.hs b/src/Database/SQLite/SimpleErrors.hs
--- a/src/Database/SQLite/SimpleErrors.hs
+++ b/src/Database/SQLite/SimpleErrors.hs
@@ -9,8 +9,14 @@
 import Database.SQLite.SimpleErrors.Types
 import Database.SQLite.SimpleErrors.Parser
 
+-- | Type synonym for what is returned by runDBAction. Either a SQLiteResponse
+-- or another type.
 type DatabaseResponse a = Either SQLiteResponse a
 
+-- | runDBAction accepts an IO action to perform some database logic using
+-- sqlite-simple. We capture any errors that are returned and wrap them
+-- in our SQLiteResponse type. If any other type of exception is raised, it is
+-- rethrown.
 runDBAction :: IO a -> IO (DatabaseResponse a)
 runDBAction sqlAction = do
   res <- try sqlAction
diff --git a/src/Database/SQLite/SimpleErrors/Parser.hs b/src/Database/SQLite/SimpleErrors/Parser.hs
--- a/src/Database/SQLite/SimpleErrors/Parser.hs
+++ b/src/Database/SQLite/SimpleErrors/Parser.hs
@@ -1,5 +1,10 @@
-module Database.SQLite.SimpleErrors.Parser where
+module Database.SQLite.SimpleErrors.Parser
+(
+  receiveSQLError
+)
+where
 
+import Control.Applicative ((<$>))
 import Control.Monad
 import           Data.Text                (Text)
 import qualified Data.Text as Text hiding (Text)
@@ -37,6 +42,12 @@
 parseError e@SQLError{sqlErrorDetails = details} =
   either (\_ -> SQLOtherError e) id $ parse constraintParser "" details
 
+-- | Given a SQL error, converts it into a SQLiteResponse.
+-- If the error is not an ErrorConstraint, it is essentially just wrapped in
+-- SQLOtherError.
+-- If the error is an ErrorConstraint error, try to parse the error as one
+-- of the following kinds of constraint violations: Foreign Key, Not Null,
+-- Unique, or Check.
 receiveSQLError :: SQLError -> SQLiteResponse
 receiveSQLError e@SQLError{sqlError = ErrorConstraint} = parseError e
 receiveSQLError e = SQLOtherError e
diff --git a/src/Database/SQLite/SimpleErrors/Types.hs b/src/Database/SQLite/SimpleErrors/Types.hs
--- a/src/Database/SQLite/SimpleErrors/Types.hs
+++ b/src/Database/SQLite/SimpleErrors/Types.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+
 module Database.SQLite.SimpleErrors.Types where
 
 import Control.Exception
@@ -5,12 +7,16 @@
 import Data.Typeable
 import Database.SQLite.Simple (FormatError, ResultError, SQLError)
 
+-- | Constraint represents the kind of constraint violation returned by SQLite.
 data Constraint = NotNull
                 | ForeignKey
                 | Unique
                 | Check
   deriving (Show, Eq)
 
+-- | SQLiteResponse is a wrapper around the different kinds of errors that can
+-- be returned frm sqlite-simple. If there is a constraint error, then we will
+-- construnct a SQLConstraintError instance.
 data SQLiteResponse = SQLConstraintError Constraint Text
                     | SQLFormatError FormatError
                     | SQLResultError ResultError
diff --git a/test/Utils.hs b/test/Utils.hs
--- a/test/Utils.hs
+++ b/test/Utils.hs
@@ -11,6 +11,7 @@
 import Control.Monad.State
 import Database.SQLite.Simple (open, close, execute_, Connection)
 import SQLUtils
+import System.Exit
 
 data Test a = Test {
   testName   :: String
@@ -43,7 +44,11 @@
 } deriving (Monad, Functor, Applicative, MonadState Results, MonadIO)
 
 executeTestRunner :: (Eq a, Show a) => [Test a] -> IO ()
-executeTestRunner tests = print =<< execStateT (runSuite $ runTests tests) empty
+executeTestRunner tests = do
+  results <- execStateT (runSuite $ runTests tests) empty
+  print results
+  when (failed results > 0) exitFailure
+  exitSuccess
 
 setupDB :: Connection -> IO ()
 setupDB conn = execute_ conn createTableSQL     >>
