diff --git a/Sound/Analysis/Meapsoft.hs b/Sound/Analysis/Meapsoft.hs
--- a/Sound/Analysis/Meapsoft.hs
+++ b/Sound/Analysis/Meapsoft.hs
@@ -28,9 +28,12 @@
                    -- | The analysis data stored in a 'UArray'.
                    --   Indices are of the form (row, column).
                  , uarray_data :: UArray (Int, Int) Double }
-          
+
 -- | Load a MEAPsoft analysis file, either a segmentation file or a
 --   feature file.
+--
+-- > Right m <- read_meap "/home/rohan/data/audio/jonchaies.wav.seg"
+-- > map feature_name (features m) == ["onset_time","chunk_length"]
 read_meap :: FilePath -> IO (Either String MEAP)
 read_meap fn = do
   r <- read_header fn
@@ -40,11 +43,17 @@
                     (nf, d) <- read_data fn nc
                     return (Right (MEAP h nf d))
 
--- | The number of columns at each analysis frame (row).
+-- | The number of columns at each analysis frame (row).  Segmentation
+-- files have two columns, onset time and segment length.
+--
+-- > n_columns m == 2
 n_columns :: MEAP -> Int
 n_columns = sum . map feature_degree . features
 
--- | Extract the indicated column as a list.
+-- | Extract the indicated column as a list.  The length of the column
+-- is the 'n_frames' of the analysis file.
+--
+-- > length (column_l m 0) == n_frames m
 column_l :: MEAP -> Int -> [Double]
 column_l m j =
     let d = uarray_data m
@@ -52,6 +61,8 @@
     in map (\i -> d ! (i, j)) is
 
 -- | Extract the indicated frame (row) as a list.
+--
+-- > length (frame_l m 0) == n_columns m
 frame_l :: MEAP -> Int -> [Double]
 frame_l m i =
     let d = uarray_data m
@@ -59,11 +70,16 @@
     in map (\j -> d ! (i, j)) js
 
 -- | Extract data from the indicated frame and column.
+--
+-- > position m (0,0) == frame_l m 0 !! 0
 position :: MEAP -> (Int, Int) -> Double
 position m (i, j) = uarray_data m ! (i, j)
 
 -- | Extract segmentation data as a list.  The segmentation data is
 --   given by the two columns onset_time and chunk_length.
+--
+-- > length (segments_l m) == n_frames m
+-- > segments_l m !! 0 == (\[i,j] -> (i,j)) (frame_l m 0)
 segments_l :: MEAP -> [(Double, Double)]
 segments_l m =
     let fs = features m
@@ -73,6 +89,8 @@
     in zip (column_l m o) (column_l m d)
 
 -- | The list of feature names generated by MEAPsoft 2.0.
+--
+-- > map (`elem` feature_names) ["onset_time","chunk_length"] == [True,True]
 feature_names :: [String]
 feature_names =
     ["onset_time"
diff --git a/Sound/Analysis/Meapsoft/Data.hs b/Sound/Analysis/Meapsoft/Data.hs
--- a/Sound/Analysis/Meapsoft/Data.hs
+++ b/Sound/Analysis/Meapsoft/Data.hs
@@ -1,3 +1,4 @@
+-- | Meapsoft analysis data input.
 module Sound.Analysis.Meapsoft.Data ( read_data ) where
 
 import Data.Array.Unboxed
diff --git a/Sound/Analysis/Meapsoft/Header.hs b/Sound/Analysis/Meapsoft/Header.hs
--- a/Sound/Analysis/Meapsoft/Header.hs
+++ b/Sound/Analysis/Meapsoft/Header.hs
@@ -1,3 +1,4 @@
+-- | Meapsoft analysis data structure.
 module Sound.Analysis.Meapsoft.Header ( Feature(..)
                                       , read_header
                                       , find_feature
diff --git a/Sound/Analysis/Meapsoft/Measure.hs b/Sound/Analysis/Meapsoft/Measure.hs
--- a/Sound/Analysis/Meapsoft/Measure.hs
+++ b/Sound/Analysis/Meapsoft/Measure.hs
@@ -1,3 +1,4 @@
+-- | Functions related to meapsoft analysis measures.
 module Sound.Analysis.Meapsoft.Measure where
 
 -- | Cycles per second to MEL conversion, see Stevens & Volkman, 1940.
diff --git a/hmeap.cabal b/hmeap.cabal
--- a/hmeap.cabal
+++ b/hmeap.cabal
@@ -1,5 +1,5 @@
 Name:              hmeap
-Version:           0.10
+Version:           0.11
 Synopsis:          Haskell Meapsoft Parser
 Description:       Parser for the anaylsis files produced by the
                    Meapsoft feature extractor.
@@ -10,7 +10,7 @@
 Maintainer:        rd@slavepianos.org
 Stability:         Experimental
 Homepage:          http://slavepianos.org/rd/?t=hmeap
-Tested-With:       GHC == 6.12.1
+Tested-With:       GHC == 7.2.2
 Build-Type:        Simple
 Cabal-Version:     >= 1.8
 
