|Maintainer||Edward Kmett <firstname.lastname@example.org>|
Reifies arbitrary terms at the type level. Based on the Functional Pearl: Implicit Configurations paper by Oleg Kiselyov and Chung-chieh Shan.
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.
reify 6 (\p -> reflect p + reflect p)12
The argument passed along by reify is just a
data , 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
Proxy t =
In addition, a simpler API is offered for working with singleton values such as a system configuration, etc.
Recover a value inside a
reify context, given a proxy for its
Reify a value at the type level, to be recovered with
This is a version of
Reifies that allows for only a single value.
This is easier to work with than
Reifies and permits extended defaulting,
but it only offers a single reflected value of a given type at a time.
Template Haskell reflection
This can be used to generate a template haskell splice for a type level version of a given
This does not use GHC TypeLits, instead it generates a numeric type by hand similar to the ones used in the "Functional Pearl: Implicit Configurations" paper by Oleg Kiselyov and Chung-Chieh Shan.
instance Num (Q Exp) provided in this package allows writing
$(int 3). Sometimes the two will produce the same
representation (if compiled without the
This is a restricted version of
int that can only generate natural numbers. Attempting to generate
a negative number results in a compile time error. Also the resulting sequence will consist entirely of
Z, D, and SD constructors representing the number in zeroless binary.