diff --git a/Language/Phonetic.hs b/Language/Phonetic.hs
--- a/Language/Phonetic.hs
+++ b/Language/Phonetic.hs
@@ -1,7 +1,17 @@
+-- | \"A phonetic algorithm is an algorithm for indexing of words by their
+--   pronunciation\": <https://en.wikipedia.org/wiki/Phonetic_algorithm>.
+--
+--   Right now only a very rudimental one is provided, 'Soundex'; plus
+--   'Encoder', a generic interface.
 module Language.Phonetic
-    ( module Language.Phonetic.Encoder
-    , module Language.Phonetic.Soundex
+    ( -- * Types
+      Code
+    , Alphabet
+    , Encoder (..)
+      -- * Algorithms
+    , Soundex
     ) where
 
 import Language.Phonetic.Encoder
 import Language.Phonetic.Soundex
+import Language.Phonetic.Internal
diff --git a/Language/Phonetic/Encoder.hs b/Language/Phonetic/Encoder.hs
--- a/Language/Phonetic/Encoder.hs
+++ b/Language/Phonetic/Encoder.hs
@@ -1,6 +1,9 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE ScopedTypeVariables #-}
-module Language.Phonetic.Encoder (Encoder (..)) where
+module Language.Phonetic.Encoder
+    ( Code
+    , Encoder (..)
+    ) where
 
 import qualified Data.Set as Set
 
@@ -10,10 +13,18 @@
 import           Language.Phonetic.Internal
 
 
+-- | Type class for algorithms that encode words based on their pronunciation.
+--
+--   Minimal definition: 'alphabet', 'encodeUnsafe'.
 class Encoder enc where
+    -- | The range of characters that the algorithm will accept
     alphabet     :: Alphabet enc
+    -- | Unchecked encoding: if characters not in 'alphabet' are in the word the
+    --   behaviour is undefined.  You should use 'encode'.
     encodeUnsafe :: ListLike full Char => full -> Code enc
 
+    -- | Safe 'encodeUnsafe': checks that all the characters are in 'alphabet'
+    --   first.
     encode :: ListLike full Char => full -> Maybe (Code enc)
     encode ll | ListLike.all (flip Set.member alph) ll = Just (encodeUnsafe ll)
               | otherwise                              = Nothing
diff --git a/Language/Phonetic/Internal.hs b/Language/Phonetic/Internal.hs
--- a/Language/Phonetic/Internal.hs
+++ b/Language/Phonetic/Internal.hs
@@ -1,8 +1,12 @@
+-- | See the documentation for 'Language.Distance.Internal' to see why this
+--   module is potentially dangerous.
 module Language.Phonetic.Internal where
 
 import           Data.ByteString (ByteString)
 
 import           Data.Set (Set)
 
+-- | A wrapped 'ByteString'.
 newtype Code enc     = Code {getCode :: ByteString}       deriving (Eq, Show)
+-- | A wrapped 'Set' 'Char'.
 newtype Alphabet enc = Alphabet {getAlphabet :: Set Char} deriving (Eq, Show)
diff --git a/Language/Phonetic/Soundex.hs b/Language/Phonetic/Soundex.hs
--- a/Language/Phonetic/Soundex.hs
+++ b/Language/Phonetic/Soundex.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE EmptyDataDecls #-}
-module Language.Phonetic.Soundex where
+module Language.Phonetic.Soundex (Soundex) where
 
 import           Data.Char (toUpper)
 import           Data.Word (Word8)
@@ -27,6 +27,7 @@
           ('V', Right 1    ), ('W', Left  False), ('X', Right 2    ),
           ('Y', Left  True ), ('Z', Right 2    ) ]
 
+-- | See <https://en.wikipedia.org/wiki/Soundex> for more info.
 data Soundex
 
 instance Encoder Soundex where
diff --git a/language-spelling.cabal b/language-spelling.cabal
--- a/language-spelling.cabal
+++ b/language-spelling.cabal
@@ -1,6 +1,6 @@
 Cabal-Version:      >= 1.8
 Name:               language-spelling
-Version:            0.1.1
+Version:            0.1.2
 Author:             Francesco Mazzoli (f@mazzo.li)
 Maintainer:         Francesco Mazzoli (f@mazzo.li)
 Build-Type:         Simple
@@ -59,11 +59,12 @@
                       Language.Distance.Search.BK,
                       Language.Distance.Search.TST,
                       Language.Phonetic,
-                      Language.Phonetic.Encoder,
-                      Language.Phonetic.Soundex,
                       Language.Phonetic.Internal,
                       Data.TST,
                       Data.TSTSet
+
+    Other-Modules:    Language.Phonetic.Soundex,
+                      Language.Phonetic.Encoder
 
 Test-Suite benchmarks
     Type:             exitcode-stdio-1.0
