diff --git a/finite-typelits.cabal b/finite-typelits.cabal
--- a/finite-typelits.cabal
+++ b/finite-typelits.cabal
@@ -1,5 +1,5 @@
 name:                finite-typelits
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            A type inhabited by finitely many values, indexed by type-level naturals.
 description:         A type inhabited by finitely many values, indexed by type-level naturals.
 homepage:            https://github.com/mniip/finite-typelits
diff --git a/src/Data/Finite.hs b/src/Data/Finite.hs
--- a/src/Data/Finite.hs
+++ b/src/Data/Finite.hs
@@ -13,7 +13,7 @@
         Finite,
         packFinite, packFiniteProxy,
         finite, finiteProxy,
-        getFinite,
+        getFinite, finites, finitesProxy,
         equals, cmp,
         natToFinite,
         weaken, strengthen, shift, unshift,
@@ -46,6 +46,16 @@
 -- | Same as 'finite' but with a proxy argument to avoid type signatures.
 finiteProxy :: KnownNat n => proxy n -> Integer -> Finite n
 finiteProxy _ = finite
+
+-- | Generate a list of length @n@ of all elements of @'Finite' n@.
+finites :: KnownNat n => [Finite n]
+finites = results
+  where
+    results = Finite <$> [0 .. (natVal (head results) - 1)]
+
+-- | Same as 'finites' but with a proxy argument to avoid type signatures.
+finitesProxy :: KnownNat n => proxy n -> [Finite n]
+finitesProxy _ = finites
 
 -- | Test two different types of finite numbers for equality.
 equals :: Finite n -> Finite m -> Bool
