@@ -85,7 +85,7 @@ a static, ordered set of values. They are equivalent to Haskell algebraic data
8585types whose constructors are nullary. An example of an enum type might be the days of the week,
8686or a set of status values for a piece of data.
8787
88−Enumerated types are created using the `createTypeEnum` command, for example
88+Enumerated types are created using the `createTypeEnum` command, for example:
8989
9090```Haskell
9191>>> :{
@@ -173,6 +173,34 @@ in printSQL definition
173173CREATE TYPE "complex" AS ("real" float8, "imaginary" float8);
174174```
175175
176+A row constructor is an expression that builds a row value
177+(also called a composite value) using values for its member fields.
178+
179+```Haskell
180+>>> :{
181+let
182+ i :: Expression '[] '[] 'Ungrouped '[] ('NotNull (CompositeFrom Complex))
183+ i = row (0 `As` #real :* 1 `As` #imaginary :* Nil)
184+:}
185+>>> printSQL i
186+ROW(0, 1)
187+```
188+
189+You can also use `(&)` to apply a field label to a composite value.
190+
191+```Haskell
192+>>> :{
193+let
194+ expr :: Expression '[] '[] 'Ungrouped '[] ('Null 'PGfloat8)
195+ expr = i & #imaginary
196+in printSQL expr
197+:}
198+(ROW(0, 1)).imaginary
199+```
200+
201+Both composite and enum types can be automatically encoded from and decoded to their equivalent Haskell types.
202+```
203+
176204### Version 0.2.1 - April 7, 2018
177205
178206This minor update fixes an issue where alias identifiers could conflict with