This library generates singleton types, promoted functions, and singleton
functions using Template Haskell. It is useful for programmers who wish
to use dependently typed programming techniques. The library was originally
presented in Dependently Typed Programming with Singletons, published
at the Haskell Symposium, 2012.
(https://cs.brynmawr.edu/~rae/papers/2012/singletons/paper.pdf)
Version 1.0 and onwards works a lot harder to promote functions. See the
paper published at Haskell Symposium, 2014:
https://cs.brynmawr.edu/~rae/papers/2014/promotion/promotion.pdf.