diff --git a/Data/ByteString/Nums/Careless.hs b/Data/ByteString/Nums/Careless.hs
--- a/Data/ByteString/Nums/Careless.hs
+++ b/Data/ByteString/Nums/Careless.hs
@@ -1,13 +1,12 @@
 
 
 
-{-| Careless conversion of @ByteString@s to numbers, ignoring bytes that
-    aren't hex or decimal digits.
+{-| Careless conversion of @ByteString@s to numbers.
  -}
 module Data.ByteString.Nums.Careless
-  ( module Data.ByteString.Nums.Careless.Int
-  , module Data.ByteString.Nums.Careless.Hex
-  , module Data.ByteString.Nums.Careless.Float
+  ( Intable(..) 
+  , Hexable(..)
+  , Floatable(..)
   ) where
 
 
diff --git a/Data/ByteString/Nums/Careless/Float.hs b/Data/ByteString/Nums/Careless/Float.hs
--- a/Data/ByteString/Nums/Careless/Float.hs
+++ b/Data/ByteString/Nums/Careless/Float.hs
@@ -2,10 +2,16 @@
 
 {-# LANGUAGE MultiParamTypeClasses
            , TypeSynonymInstances
+           , FlexibleContexts
   #-}
 
 
-module Data.ByteString.Nums.Careless.Float where
+module Data.ByteString.Nums.Careless.Float
+  ( point
+  , lazy_float
+  , strict_float
+  , Floatable(..)
+  ) where
 
 
 import Data.Char
@@ -46,6 +52,9 @@
 
 
 
+{-| Implementation for strict @Data.ByteString.ByteString@.
+ -}
+strict_float :: (Intable ByteString f, Fractional f) => ByteString -> f
 strict_float bytes
   | null bytes               =  0
   | head bytes == '-'        =  foldn 0 (tail integer) + nfrac
@@ -65,6 +74,9 @@
     | otherwise              =  foldp 0 fractional' * p
 
 
+{-| Implementation for lazy @Data.ByteString.Lazy.ByteString@.
+ -}
+lazy_float :: (Intable Lazy.ByteString f, Fractional f) => Lazy.ByteString -> f
 lazy_float bytes
   | Lazy.null bytes          =  0
   | Lazy.head bytes == '-'   =  foldn 0 (Lazy.tail integer) + nfrac
@@ -84,6 +96,9 @@
     | otherwise              =  foldp 0 fractional' * p
 
 
+{-| Is this character a decimal point or comma?
+ -}
+point                       ::  Char -> Bool
 point c                      =  c == '.' || c == ','
 
 
diff --git a/Data/ByteString/Nums/Careless/Hex.hs b/Data/ByteString/Nums/Careless/Hex.hs
--- a/Data/ByteString/Nums/Careless/Hex.hs
+++ b/Data/ByteString/Nums/Careless/Hex.hs
@@ -5,7 +5,12 @@
   #-}
 
 
-module Data.ByteString.Nums.Careless.Hex where
+module Data.ByteString.Nums.Careless.Hex
+  ( hexalize
+  , lazy_hex
+  , strict_hex
+  , Hexable(..)
+  ) where
 
 
 import Prelude hiding (head, tail, drop)
@@ -89,6 +94,9 @@
 
 
 
+{-| Folds a byte into a number if the byte is a hexadecimal digit; otherwise
+    the byte is ignored.
+ -}
 hexalize                    ::  (Num n) => n -> Word8 -> n
 hexalize acc byte
   | between 'a' 'f'          =  place_up (byte + 0x0a - c2w 'a')
@@ -99,8 +107,15 @@
   between a z                =  byte >= c2w a && byte <= c2w z
   place_up b                 =  (0x10 * acc) + fromIntegral b
 
+
+{-| Strict fold with 'hexalize'.
+ -}
+strict_hex                  ::  (Num n) => ByteString -> n
 strict_hex bytes             =  foldl' hexalize 0 bytes
 
+{-| Lazy fold with 'hexalize'.
+ -}
+lazy_hex                    ::  (Num n) => Lazy.ByteString -> n
 lazy_hex bytes               =  Lazy.foldlChunks (foldl' hexalize) 0 bytes
 
 
diff --git a/Data/ByteString/Nums/Careless/Int.hs b/Data/ByteString/Nums/Careless/Int.hs
--- a/Data/ByteString/Nums/Careless/Int.hs
+++ b/Data/ByteString/Nums/Careless/Int.hs
@@ -5,7 +5,15 @@
   #-}
 
 
-module Data.ByteString.Nums.Careless.Int where
+module Data.ByteString.Nums.Careless.Int
+  ( positive
+  , negative
+  , lazy_unsigned
+  , lazy_signed
+  , strict_unsigned
+  , strict_signed
+  , Intable(..)
+  ) where
 
 
 import Prelude hiding (head, tail, null)
@@ -89,9 +97,18 @@
 
 
 
+{-| Implementation of unsigned number parser for
+    'Data.ByteString.Lazy.ByteString'. Only digits are parsed; no sign
+    specifier is allowed.
+ -}
 lazy_unsigned               ::  (Num n) => Lazy.ByteString -> n
 lazy_unsigned                =  Lazy.foldlChunks (foldl' positive) 0
 
+{-| Implementation of signed number parser for
+    'Data.ByteString.Lazy.ByteString'. An initial, optional sign specifier is
+    okay.
+ -}
+lazy_signed                 ::  (Num n) => Lazy.ByteString -> n
 lazy_signed bytes
   | Lazy.null bytes          =  0
   | Lazy.head bytes == '-'   =  fold negative 0 (Lazy.tail bytes)
@@ -101,9 +118,16 @@
   fold                       =  Lazy.foldlChunks . foldl'
 
 
+{-| Implementation of unsigned number parser for 'Data.ByteString.ByteString'.
+    Only digits are parsed; no sign specifier is allowed.
+ -}
 strict_unsigned             ::  (Num n) => ByteString -> n
 strict_unsigned              =  foldl' positive 0
 
+{-| Implementation of signed number parser for 'Data.ByteString.ByteString'.
+    An initial, optional sign specifier is okay.
+ -}
+strict_signed               ::  (Num n) => ByteString -> n
 strict_signed bytes
   | null bytes               =  0
   | head bytes == '-'        =  foldl' negative 0 (tail bytes)
@@ -111,8 +135,16 @@
   | otherwise                =  foldl' positive 0 bytes
 
 
+{-| Folds a byte into the accumulator, assuming the number we are parsing is
+    a positive number.
+ -}
+positive                    ::  (Num n) => n -> Word8 -> n
 positive  acc  byte          =  (acc * 10) + fromIntegral (byte - c2w '0')
 
+{-| Folds a byte into the accumulator, assuming the number we are parsing is
+    a negative number.
+ -}
+negative                    ::  (Num n) => n -> Word8 -> n
 negative  acc  byte          =  (acc * 10) - fromIntegral (byte - c2w '0')
 
 
diff --git a/bytestring-nums.cabal b/bytestring-nums.cabal
--- a/bytestring-nums.cabal
+++ b/bytestring-nums.cabal
@@ -1,5 +1,5 @@
 name                          : bytestring-nums
-version                       : 0.3.0
+version                       : 0.3.1
 category                      : Text
 license                       : BSD3
 license-file                  : LICENSE
@@ -27,7 +27,7 @@
                                 Data.ByteString.Nums.Careless.Float
   extensions                  : MultiParamTypeClasses
                                 TypeSynonymInstances
-                                BangPatterns
+                                FlexibleContexts
   ghc-options                 : -O2 -Wall -funbox-strict-fields
 
 
@@ -35,7 +35,7 @@
   main-is                     : SPOJEugeneKirpichov.hs
   extensions                  : MultiParamTypeClasses
                                 TypeSynonymInstances
-                                BangPatterns
+                                FlexibleContexts
   ghc-options                 : -O2 -Wall -funbox-strict-fields
 
 
