A library to support the definition of generic functions. Datatypes are viewed in a uniform, structured way: the choice between constructors is represented using an n-ary sum, and the arguments of each constructor are represented using an n-ary product. The module "Generics.SOP" is the main module of this library and contains more detailed documentation. Examples of using this library are provided by the following packages: * @<https://hackage.haskell.org/package/basic-sop basic-sop>@ basic examples, * @<https://hackage.haskell.org/package/pretty-sop pretty-sop>@ generic pretty printing, * @<https://hackage.haskell.org/package/lens-sop lens-sop>@ generically computed lenses, * @<https://hackage.haskell.org/package/json-sop json-sop>@ generic JSON conversions. A detailed description of the ideas behind this library is provided by the paper: * Edsko de Vries and Andres Löh. <http://www.andres-loeh.de/TrueSumsOfProducts True Sums of Products>. Workshop on Generic Programming (WGP) 2014.