|Portability||non-portable (rank-2 types, type families, scoped type variables)|
|Maintainer||Edward Kmett <email@example.com>|
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.
ghci> reify 6 (\p -> reflect p + reflect p) :: Int 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