This package provides an implementation of the ideas presented in Functional Pearl: Implicit Configurations by Oleg Kiselyov and Chung-Chieh Shan. However, the API has been implemented in a much more efficient manner.
Contact Information
Contributions and bug reports are welcome!
Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.
-Edward Kmett
Changes
2.1.7 [2023.02.28]
When building with base-4.18 (GHC 9.6) or later, implement reifyNat and
reifySymbol using the API provided by GHC.TypeLits instead of resorting
to unsafeCoerce.
2.1.6 [2020.05.16]
Fix a bug in which give (and possibly reify, reifyNat, and
reifySymbol) could be unsoundly inlined by GHC 8.10 or older to produce
incorrect runtime results.
2.1.5 [2019.08.27]
Fix a bug in which reifyNat would yield incorrect results for very large
Integers on GHC 8.2 or later.
2.1.4 [2018.07.02]
Allow building with GHC 8.6.
2.1.3 [2018.01.18]
Add Semigroup instance for ReflectedMonoid.
2.1.2
Support cross-compilation and unregistered GHC builds.
2.1.1.1
Fixed typos in the documentation.
2.1.1
Fixed support for GHC 7.0
2.1
Added ReifiedMonoid and ReifiedApplicative.
2
Added reifyNat and reifySymbol for GHC 7.8+, capable of reflecting into the KnownNat and KnownSymbol classes respectively for use with other APIs.
Back-ported reifyTypeable from lens. This enables us to perform a (less efficient) form of Typeable reflection.
1.5.2
Renamed the flag for disabling the use of template-haskell, to -f-template-haskell for consistency with my other packages.
1.5.1.2
Builds warning-free on GHC 7.10.
Added a dynamic FromJSON example.
1.5.1.1
Updated the link to the paper.
More examples.
1.5.1
We no longer export Show (Q a) for GHC >= 7.4. This was causing random hangs when users tried to somehow run declaration splices from the REPL.
We no longer depend on tagged for GHC >= 7.8, since Proxy is now in base.
1.5
Added a flag to disable template-haskell support for GHC stage1 platforms.
Added instances of Reifies for GHC.TypeLits
1.4
Changed the behavior of the $(1) template haskell splices for Exp to use a Proxy rather than value-level numbers. This is more consistent with the role of this libraary and the other could always be generated via sa splice anyways.
1.3.1
Added a workaround for changes in the behavior of the internal ‘Magic’ datatype under the current GHC PolyKinds implementation.
1.3
Merged some functionality from Data.Analytics.Reflection. Notably the ability to use type nats to reflect numbers, and to splice numbers directly. This reduces orphan instances somewhat.
1.2
Added Given and give.
1.1.7
Fixed an issue caused by changes in GHC 7.7’s typechecker by using explicit ScopedTypeVariables.
1.1.6:
Relaxed an unnecessary strictness annotation in the fast implementation
1.1.5
Both implementations now work on Hugs; the fast implementation ascends
from the ranks of completely unportable black magic to being merely
/mostly/ unportable black magic.
From 0.5 to 1.1:
Much faster implementation available that is about 50 /times/ faster than
0.9 and which runs purely on black magic. This version is now used by
default. To turn it off install with the slow flag. If you encounter a
problem with the implementation, please contact the author.
Removed ReifiedNum, reflectNum, and reifyIntegral; reify and
reflect are about 3 orders of magnitude faster than the special case
combinators were.
0.5
Generalized the type signatures in reflect to allow you to pass any type
with kind * -> * wrapped around the desired type as the phantom type
argument rather than just a Proxy.
0.4
Converted from Data.Tagged to using Data.Proxy for reflection. This
reduces the need for helper functions and scoped type variables in user
code.