{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses,
UndecidableInstances, EmptyDataDecls #-}     The HList library
A model of labels as needed for extensible records. As before,
all the information about labels is recorded in their type, so
the labels of records may be purely phantom. In general,
Labels are exclusively type-level entities and have no run-time
Record labels are triplets of type-level naturals, namespace,
and description. The namespace part helps avoid confusions
between    labels from different Haskell modules. The
description is    an arbitrary nullary type constructor.    For
the sake of printing, the namespace part and the description
are required to be the instance of Show. One must make sure that
the show functions does not examine the value, as descr is
purely phantom.    Here's an example of the good Label
description:         data MyLabelDescr; instance Show
MyLabelDescr where show _ = "descr"    which obviously can be
automated with Template Haskell.