|Copyright||2009-2014 Edward Kmett, 2012 Elliott Hird, 2004 Oleg Kiselyov and Chung-chieh Shan|
|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 streamline the API by Edward Kmett and Elliott Hird.
Usage comes down to two combinators,
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 =
This is necessary to work around the changes to
Data.Typeable in GHC HEAD.
class Reifies s a | s -> a where
reflect :: proxy s -> a