diff --git a/compound-types.cabal b/compound-types.cabal
--- a/compound-types.cabal
+++ b/compound-types.cabal
@@ -1,7 +1,7 @@
 name:
   compound-types
 version:
-  0.1.1.1
+  0.1.2
 category:
   Data, Types, Type System
 synopsis:
diff --git a/demo/Main.hs b/demo/Main.hs
--- a/demo/Main.hs
+++ b/demo/Main.hs
@@ -8,23 +8,20 @@
   putStrLn "This demonstration is all about the compilability"
 
 -- |
--- Same as the following type: 
+-- This function exhibits the benefit of the first-class sum-type
+-- being usable as a function parameter.
 -- 
--- > Sum3 Int Char Bool
-type IntCharBoolSum =
-  Int + Char + Bool
-
--- |
--- How it can be pattern-matched
-intCharBoolSumToText :: IntCharBoolSum -> String
-intCharBoolSumToText =
+-- It also shows, how we can pattern-match it.
+intCharBoolSumToString :: Int + Char + Bool -> String
+intCharBoolSumToString =
   \case
     Sum3_1 int -> "Int: " <> show int
     Sum3_2 char -> "Char: " <> show char
     Sum3_3 bool -> "Bool: " <> show bool
 
 -- |
--- Same as the following type:
+-- Following is an example of a more complicated composition,
+-- which is the same as the following type:
 -- 
 -- > Sum3 Int (Product2 Char (Sum2 Bool String)) Char
 -- 
diff --git a/library/CompoundTypes/Lazy.hs b/library/CompoundTypes/Lazy.hs
--- a/library/CompoundTypes/Lazy.hs
+++ b/library/CompoundTypes/Lazy.hs
@@ -1,8 +1,10 @@
 -- |
--- Implementations of strict data-structures.
+-- Implementations of the lazy data-structures.
 module CompoundTypes.Lazy
 (
+  -- * Sum-types
   module CompoundTypes.Private.Lazy.Sum,
+  -- * Product-types
   module CompoundTypes.Private.Lazy.Product,
 )
 where
diff --git a/library/CompoundTypes/Private/Lazy/Product.hs b/library/CompoundTypes/Private/Lazy/Product.hs
--- a/library/CompoundTypes/Private/Lazy/Product.hs
+++ b/library/CompoundTypes/Private/Lazy/Product.hs
@@ -1,40 +1,69 @@
 module CompoundTypes.Private.Lazy.Product where
 
 
-data Product2 a b =
-  Product2 a b
+data Product2 v1 v2 =
+  Product2 v1 v2
 
-data Product3 a b c =
-  Product3 a b c
+data Product3 v1 v2 v3 =
+  Product3 v1 v2 v3
 
-data Product4 a b c d =
-  Product4 a b c d
+data Product4 v1 v2 v3 v4 =
+  Product4 v1 v2 v3 v4
 
-data Product5 a b c d e =
-  Product5 a b c d e
+data Product5 v1 v2 v3 v4 v5 =
+  Product5 v1 v2 v3 v4 v5
 
+data Product6 v1 v2 v3 v4 v5 v6 =
+  Product6 v1 v2 v3 v4 v5 v6
+
+data Product7 v1 v2 v3 v4 v5 v6 v7 =
+  Product7 v1 v2 v3 v4 v5 v6 v7
+
+
 -- |
 -- Automatically derives the product-type of the according arity
 -- from expressions such as:
 -- 
--- > (Int * Char * Bool)
+-- > Int * Char * Bool
 -- 
 -- In that case it will resolve to:
 -- 
 -- > Product3 Int Char Bool
 type family (*) a b where
+  Product6 v1 v2 v3 v4 v5 v6 * v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product5 v1 v2 v3 v4 v5 * Product2 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product5 v1 v2 v3 v4 v5 * v6 =
+    Product6 v1 v2 v3 v4 v5 v6
+  Product4 v1 v2 v3 v4 * Product3 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product4 v1 v2 v3 v4 * Product2 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   Product4 v1 v2 v3 v4 * v5 =
     Product5 v1 v2 v3 v4 v5
+  Product3 v1 v2 v3 * Product4 v4 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product3 v1 v2 v3 * Product3 v4 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   Product3 v1 v2 v3 * Product2 v4 v5 =
     Product5 v1 v2 v3 v4 v5
   Product3 v1 v2 v3 * v4 =
     Product4 v1 v2 v3 v4
+  Product2 v1 v2 * Product5 v3 v4 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product2 v1 v2 * Product4 v3 v4 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   Product2 v1 v2 * Product3 v3 v4 v5 =
     Product5 v1 v2 v3 v4 v5
   Product2 v1 v2 * Product2 v3 v4 =
     Product4 v1 v2 v3 v4
   Product2 v1 v2 * v3 =
     Product3 v1 v2 v3
+  v1 * Product6 v2 v3 v4 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  v1 * Product5 v2 v3 v4 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   v1 * Product4 v2 v3 v4 v5 =
     Product5 v1 v2 v3 v4 v5
   v1 * Product3 v2 v3 v4 =
diff --git a/library/CompoundTypes/Private/Lazy/Sum.hs b/library/CompoundTypes/Private/Lazy/Sum.hs
--- a/library/CompoundTypes/Private/Lazy/Sum.hs
+++ b/library/CompoundTypes/Private/Lazy/Sum.hs
@@ -1,40 +1,69 @@
 module CompoundTypes.Private.Lazy.Sum where
 
 
-data Sum2 a b =
-  Sum2_1 a | Sum2_2 b
+data Sum2 v1 v2 =
+  Sum2_1 v1 | Sum2_2 v2
 
-data Sum3 a b c =
-  Sum3_1 a | Sum3_2 b | Sum3_3 c
+data Sum3 v1 v2 v3 =
+  Sum3_1 v1 | Sum3_2 v2 | Sum3_3 v3
 
-data Sum4 a b c d =
-  Sum4_1 a | Sum4_2 b | Sum4_3 c | Sum4_4 d
+data Sum4 v1 v2 v3 v4 =
+  Sum4_1 v1 | Sum4_2 v2 | Sum4_3 v3 | Sum4_4 v4
 
-data Sum5 a b c d e =
-  Sum5_1 a | Sum5_2 b | Sum5_3 c | Sum5_4 d | Sum5_5 e
+data Sum5 v1 v2 v3 v4 v5 =
+  Sum5_1 v1 | Sum5_2 v2 | Sum5_3 v3 | Sum5_4 v4 | Sum5_5 v5
 
+data Sum6 v1 v2 v3 v4 v5 v6 =
+  Sum6_1 v1 | Sum6_2 v2 | Sum6_3 v3 | Sum6_4 v4 | Sum6_5 v5 | Sum6_6 v6
+
+data Sum7 v1 v2 v3 v4 v5 v6 v7 =
+  Sum7_1 v1 | Sum7_2 v2 | Sum7_3 v3 | Sum7_4 v4 | Sum7_5 v5 | Sum7_6 v6 | Sum7_7 v7
+
+
 -- |
 -- Automatically derives the sum-type of the according arity
 -- from expressions such as:
 -- 
--- > (Int + Char + Bool)
+-- > Int + Char + Bool
 -- 
 -- In that case it will resolve to:
 -- 
 -- > Sum3 Int Char Bool
 type family (+) a b where
+  Sum6 v1 v2 v3 v4 v5 v6 + v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum5 v1 v2 v3 v4 v5 + Sum2 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum5 v1 v2 v3 v4 v5 + v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
+  Sum4 v1 v2 v3 v4 + Sum3 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum4 v1 v2 v3 v4 + Sum2 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   Sum4 v1 v2 v3 v4 + v5 =
     Sum5 v1 v2 v3 v4 v5
+  Sum3 v1 v2 v3 + Sum4 v4 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum3 v1 v2 v3 + Sum3 v4 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   Sum3 v1 v2 v3 + Sum2 v4 v5 =
     Sum5 v1 v2 v3 v4 v5
   Sum3 v1 v2 v3 + v4 =
     Sum4 v1 v2 v3 v4
+  Sum2 v1 v2 + Sum5 v3 v4 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum2 v1 v2 + Sum4 v3 v4 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   Sum2 v1 v2 + Sum3 v3 v4 v5 =
     Sum5 v1 v2 v3 v4 v5
   Sum2 v1 v2 + Sum2 v3 v4 =
     Sum4 v1 v2 v3 v4
   Sum2 v1 v2 + v3 =
     Sum3 v1 v2 v3
+  v1 + Sum6 v2 v3 v4 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  v1 + Sum5 v2 v3 v4 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   v1 + Sum4 v2 v3 v4 v5 =
     Sum5 v1 v2 v3 v4 v5
   v1 + Sum3 v2 v3 v4 =
diff --git a/library/CompoundTypes/Private/Strict/Product.hs b/library/CompoundTypes/Private/Strict/Product.hs
--- a/library/CompoundTypes/Private/Strict/Product.hs
+++ b/library/CompoundTypes/Private/Strict/Product.hs
@@ -1,40 +1,69 @@
 module CompoundTypes.Private.Strict.Product where
 
 
-data Product2 a b =
-  Product2 !a !b
+data Product2 v1 v2 =
+  Product2 !v1 !v2
 
-data Product3 a b c =
-  Product3 !a !b !c
+data Product3 v1 v2 v3 =
+  Product3 !v1 !v2 !v3
 
-data Product4 a b c d =
-  Product4 !a !b !c !d
+data Product4 v1 v2 v3 v4 =
+  Product4 !v1 !v2 !v3 !v4
 
-data Product5 a b c d e =
-  Product5 !a !b !c !d !e
+data Product5 v1 v2 v3 v4 v5 =
+  Product5 !v1 !v2 !v3 !v4 !v5
 
+data Product6 v1 v2 v3 v4 v5 v6 =
+  Product6 !v1 !v2 !v3 !v4 !v5 !v6
+
+data Product7 v1 v2 v3 v4 v5 v6 v7 =
+  Product7 !v1 !v2 !v3 !v4 !v5 !v6 !v7
+
+
 -- |
 -- Automatically derives the product-type of the according arity
 -- from expressions such as:
 -- 
--- > (Int * Char * Bool)
+-- > Int * Char * Bool
 -- 
 -- In that case it will resolve to:
 -- 
 -- > Product3 Int Char Bool
 type family (*) a b where
+  Product6 v1 v2 v3 v4 v5 v6 * v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product5 v1 v2 v3 v4 v5 * Product2 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product5 v1 v2 v3 v4 v5 * v6 =
+    Product6 v1 v2 v3 v4 v5 v6
+  Product4 v1 v2 v3 v4 * Product3 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product4 v1 v2 v3 v4 * Product2 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   Product4 v1 v2 v3 v4 * v5 =
     Product5 v1 v2 v3 v4 v5
+  Product3 v1 v2 v3 * Product4 v4 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product3 v1 v2 v3 * Product3 v4 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   Product3 v1 v2 v3 * Product2 v4 v5 =
     Product5 v1 v2 v3 v4 v5
   Product3 v1 v2 v3 * v4 =
     Product4 v1 v2 v3 v4
+  Product2 v1 v2 * Product5 v3 v4 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  Product2 v1 v2 * Product4 v3 v4 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   Product2 v1 v2 * Product3 v3 v4 v5 =
     Product5 v1 v2 v3 v4 v5
   Product2 v1 v2 * Product2 v3 v4 =
     Product4 v1 v2 v3 v4
   Product2 v1 v2 * v3 =
     Product3 v1 v2 v3
+  v1 * Product6 v2 v3 v4 v5 v6 v7 =
+    Product7 v1 v2 v3 v4 v5 v6 v7
+  v1 * Product5 v2 v3 v4 v5 v6 =
+    Product6 v1 v2 v3 v4 v5 v6
   v1 * Product4 v2 v3 v4 v5 =
     Product5 v1 v2 v3 v4 v5
   v1 * Product3 v2 v3 v4 =
diff --git a/library/CompoundTypes/Private/Strict/Sum.hs b/library/CompoundTypes/Private/Strict/Sum.hs
--- a/library/CompoundTypes/Private/Strict/Sum.hs
+++ b/library/CompoundTypes/Private/Strict/Sum.hs
@@ -1,40 +1,69 @@
 module CompoundTypes.Private.Strict.Sum where
 
 
-data Sum2 a b =
-  Sum2_1 !a | Sum2_2 !b
+data Sum2 v1 v2 =
+  Sum2_1 !v1 | Sum2_2 !v2
 
-data Sum3 a b c =
-  Sum3_1 !a | Sum3_2 !b | Sum3_3 !c
+data Sum3 v1 v2 v3 =
+  Sum3_1 !v1 | Sum3_2 !v2 | Sum3_3 !v3
 
-data Sum4 a b c d =
-  Sum4_1 !a | Sum4_2 !b | Sum4_3 !c | Sum4_4 !d
+data Sum4 v1 v2 v3 v4 =
+  Sum4_1 !v1 | Sum4_2 !v2 | Sum4_3 !v3 | Sum4_4 !v4
 
-data Sum5 a b c d e =
-  Sum5_1 !a | Sum5_2 !b | Sum5_3 !c | Sum5_4 !d | Sum5_5 !e
+data Sum5 v1 v2 v3 v4 v5 =
+  Sum5_1 !v1 | Sum5_2 !v2 | Sum5_3 !v3 | Sum5_4 !v4 | Sum5_5 !v5
 
+data Sum6 v1 v2 v3 v4 v5 v6 =
+  Sum6_1 !v1 | Sum6_2 !v2 | Sum6_3 !v3 | Sum6_4 !v4 | Sum6_5 !v5 | Sum6_6 !v6
+
+data Sum7 v1 v2 v3 v4 v5 v6 v7 =
+  Sum7_1 !v1 | Sum7_2 !v2 | Sum7_3 !v3 | Sum7_4 !v4 | Sum7_5 !v5 | Sum7_6 !v6 | Sum7_7 !v7
+
+
 -- |
 -- Automatically derives the sum-type of the according arity
 -- from expressions such as:
 -- 
--- > (Int + Char + Bool)
+-- > Int + Char + Bool
 -- 
 -- In that case it will resolve to:
 -- 
 -- > Sum3 Int Char Bool
 type family (+) a b where
+  Sum6 v1 v2 v3 v4 v5 v6 + v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum5 v1 v2 v3 v4 v5 + Sum2 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum5 v1 v2 v3 v4 v5 + v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
+  Sum4 v1 v2 v3 v4 + Sum3 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum4 v1 v2 v3 v4 + Sum2 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   Sum4 v1 v2 v3 v4 + v5 =
     Sum5 v1 v2 v3 v4 v5
+  Sum3 v1 v2 v3 + Sum4 v4 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum3 v1 v2 v3 + Sum3 v4 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   Sum3 v1 v2 v3 + Sum2 v4 v5 =
     Sum5 v1 v2 v3 v4 v5
   Sum3 v1 v2 v3 + v4 =
     Sum4 v1 v2 v3 v4
+  Sum2 v1 v2 + Sum5 v3 v4 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  Sum2 v1 v2 + Sum4 v3 v4 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   Sum2 v1 v2 + Sum3 v3 v4 v5 =
     Sum5 v1 v2 v3 v4 v5
   Sum2 v1 v2 + Sum2 v3 v4 =
     Sum4 v1 v2 v3 v4
   Sum2 v1 v2 + v3 =
     Sum3 v1 v2 v3
+  v1 + Sum6 v2 v3 v4 v5 v6 v7 =
+    Sum7 v1 v2 v3 v4 v5 v6 v7
+  v1 + Sum5 v2 v3 v4 v5 v6 =
+    Sum6 v1 v2 v3 v4 v5 v6
   v1 + Sum4 v2 v3 v4 v5 =
     Sum5 v1 v2 v3 v4 v5
   v1 + Sum3 v2 v3 v4 =
diff --git a/library/CompoundTypes/Strict.hs b/library/CompoundTypes/Strict.hs
--- a/library/CompoundTypes/Strict.hs
+++ b/library/CompoundTypes/Strict.hs
@@ -1,8 +1,10 @@
 -- |
--- Implementations of strict data-structures.
+-- Implementations of the strict data-structures.
 module CompoundTypes.Strict
 (
+  -- * Sum-types
   module CompoundTypes.Private.Strict.Sum,
+  -- * Product-types
   module CompoundTypes.Private.Strict.Product,
 )
 where
