diff --git a/spectral-clustering.cabal b/spectral-clustering.cabal
--- a/spectral-clustering.cabal
+++ b/spectral-clustering.cabal
@@ -1,6 +1,6 @@
 cabal-version: >=1.10
 name: spectral-clustering
-version: 0.2.1.3
+version: 0.2.1.4
 license: GPL-3
 license-file: LICENSE
 copyright: 2018 Gregory W. Schwartz
diff --git a/src/Math/Clustering/Spectral/Dense.hs b/src/Math/Clustering/Spectral/Dense.hs
--- a/src/Math/Clustering/Spectral/Dense.hs
+++ b/src/Math/Clustering/Spectral/Dense.hs
@@ -10,6 +10,7 @@
     , spectralNorm
     , getDegreeMatrix
     , AdjacencyMatrix (..)
+    , LabelVector (..)
     ) where
 
 -- Remote
diff --git a/src/Math/Clustering/Spectral/Eigen/AdjacencyMatrix.hs b/src/Math/Clustering/Spectral/Eigen/AdjacencyMatrix.hs
--- a/src/Math/Clustering/Spectral/Eigen/AdjacencyMatrix.hs
+++ b/src/Math/Clustering/Spectral/Eigen/AdjacencyMatrix.hs
@@ -13,6 +13,7 @@
     , getDegreeMatrix
     , secondLeft
     , AdjacencyMatrix (..)
+    , LabelVector (..)
     ) where
 
 -- Remote
diff --git a/src/Math/Clustering/Spectral/Eigen/FeatureMatrix.hs b/src/Math/Clustering/Spectral/Eigen/FeatureMatrix.hs
--- a/src/Math/Clustering/Spectral/Eigen/FeatureMatrix.hs
+++ b/src/Math/Clustering/Spectral/Eigen/FeatureMatrix.hs
@@ -10,6 +10,7 @@
     ( B (..)
     , B1 (..)
     , B2 (..)
+    , LabelVector (..)
     , spectral
     , spectralCluster
     , spectralClusterK
@@ -34,11 +35,18 @@
 
 -- Local
 
+-- | Output vector containing cluster assignment (0 or 1).
 type LabelVector = S.SparseMatrixXd
+-- | B1 observation by feature matrix.
 newtype B1 = B1 { unB1 :: S.SparseMatrixXd } deriving (Show)
+-- | B2 term frequency-inverse document frequency matrix of B1.
 newtype B2 = B2 { unB2 :: S.SparseMatrixXd } deriving (Show)
+-- | Diagonal matrix from \(diag(B(B^{T}1))\).
 newtype D  = D { unD :: S.SparseMatrixXd } deriving (Show)
+-- | Matrix from \(D^{-1/2}B}\).
 newtype C  = C { unC :: S.SparseMatrixXd } deriving (Show)
+-- | Normed rows of B2. For a complete explanation, see Shu et al., "Efficient
+-- Spectral Neighborhood Blocking for Entity Resolution", 2011.
 newtype B  = B { unB :: S.SparseMatrixXd } deriving (Show)
 
 -- | Normalize the input matrix by column. Here, columns are features.
diff --git a/src/Math/Clustering/Spectral/Sparse.hs b/src/Math/Clustering/Spectral/Sparse.hs
--- a/src/Math/Clustering/Spectral/Sparse.hs
+++ b/src/Math/Clustering/Spectral/Sparse.hs
@@ -11,6 +11,7 @@
     , B1 (..)
     , B2 (..)
     , AdjacencyMatrix (..)
+    , LabelVector (..)
     , spectral
     , spectralCluster
     , spectralClusterK
@@ -39,12 +40,22 @@
 
 -- Local
 
+-- | Output vector containing cluster assignment (0 or 1).
 type LabelVector = S.SpVector Double
+
+-- | Adjacency matrix input.
 type AdjacencyMatrix = S.SpMatrix Double
+
+-- | B1 observation by feature matrix.
 newtype B1 = B1 { unB1 :: S.SpMatrix Double } deriving (Show)
+-- | B2 term frequency-inverse document frequency matrix of B1.
 newtype B2 = B2 { unB2 :: S.SpMatrix Double } deriving (Show)
+-- | Diagonal matrix from \(diag(B(B^{T}1))\).
 newtype D  = D { unD :: S.SpMatrix Double } deriving (Show)
+-- | Matrix from \(D^{-1/2}B}\).
 newtype C  = C { unC :: S.SpMatrix Double } deriving (Show)
+-- | Normed rows of B2. For a complete explanation, see Shu et al., "Efficient
+-- Spectral Neighborhood Blocking for Entity Resolution", 2011.
 newtype B  = B { unB :: S.SpMatrix Double } deriving (Show)
 
 -- | Normalize the input matrix by column. Here, columns are features.
