diff --git a/fixed-length.cabal b/fixed-length.cabal
--- a/fixed-length.cabal
+++ b/fixed-length.cabal
@@ -1,5 +1,5 @@
 Name:             fixed-length
-Version:          0.2.1
+Version:          0.2.2
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -25,7 +25,7 @@
 Build-Type:       Simple
 
 Source-Repository this
-  Tag:         0.2.1
+  Tag:         0.2.2
   Type:        darcs
   Location:    http://hub.darcs.net/thielema/fixed-length/
 
diff --git a/src/Data/FixedLength.hs b/src/Data/FixedLength.hs
--- a/src/Data/FixedLength.hs
+++ b/src/Data/FixedLength.hs
@@ -13,6 +13,7 @@
    (!:), end, singleton,
    viewL, switchL, head, tail, switchEnd,
    Curried, curry, uncurry,
+   ConsAll, NumberOfArguments, ResultSize, ResultElement, consAll,
    minimum, maximum,
    ) where
 
@@ -334,6 +335,31 @@
    Unary.switchNat
       (Uncurry switchEnd)
       (Uncurry $ \f -> switchL (\x -> uncurry (f x)))
+
+
+class ConsAll f where
+   type NumberOfArguments f
+   type ResultSize f
+   type ResultElement f
+   consAux ::
+      (NumberOfArguments f ~ m, ResultSize f ~ n, ResultElement f ~ a) =>
+      (T m a -> T n a) -> f
+
+instance ConsAll (T n a) where
+   type NumberOfArguments (T n a) = Unary.Zero
+   type ResultSize (T n a) = n
+   type ResultElement (T n a) = a
+   consAux f = f end
+
+instance (a ~ ResultElement f, ConsAll f) => ConsAll (a -> f) where
+   type NumberOfArguments (a->f) = Unary.Succ (NumberOfArguments f)
+   type ResultSize (a->f) = ResultSize f
+   type ResultElement (a->f) = ResultElement f
+   consAux f x = consAux (f . (x!:))
+
+consAll ::
+   (ConsAll f, ResultSize f ~ n, NumberOfArguments f ~ n, Natural n) => f
+consAll = consAux P.id
 
 
 undefinedElem :: T n a -> a
