Reifies arbitrary terms at the type level. Based on the Functional
Pearl: Implicit Configurations paper by Oleg Kiselyov and Chung-chieh
Shan.
http://okmij.org/ftp/Haskell/tr-15-04.pdf
The approach from the paper was modified to work with Data.Proxy and
to cheat by using knowledge of GHC's internal representations by
Edward Kmett and Elliott Hird.
Usage comes down to two combinators,
reify and
reflect.
>>> reify 6 (\p -> reflect p + reflect p)
12
The argument passed along by reify is just a
data Proxy t =
Proxy, so all of the information needed to reconstruct your value
has been moved to the type level. This enables it to be used when
constructing instances (see
examples/Monoid.hs).
In addition, a simpler API is offered for working with singleton
values such as a system configuration, etc.