Reifies arbitrary terms into types that can be reflected back into terms
|LTS Haskell 20.24:||2.1.7|
|Stackage Nightly 2023-06-04:||2.1.7|
|Latest on Hackage:||2.1.7|
Maintained by Edward A. Kmett
This version can be pinned in stack with:
Module documentation for 2.1.7
Depends on 2 packages(full list with versions):
Used by 15 packages in lts-20.24(full list with versions):
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.
Contributions and bug reports are welcome!
Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.
- When building with
base-4.18(GHC 9.6) or later, implement
reifySymbolusing the API provided by
GHC.TypeLitsinstead of resorting to
- Fix a bug in which
reifySymbol) could be unsoundly inlined by GHC 8.10 or older to produce incorrect runtime results.
- Fix a bug in which
reifyNatwould yield incorrect results for very large
Integers on GHC 8.2 or later.
- Allow building with GHC 8.6.
- Support cross-compilation and unregistered GHC builds.
- Fixed typos in the documentation.
- Fixed support for GHC 7.0
reifySymbolfor GHC 7.8+, capable of reflecting into the
KnownSymbolclasses respectively for use with other APIs.
lens. This enables us to perform a (less efficient) form of
- Renamed the flag for disabling the use of
-f-template-haskellfor consistency with my other packages.
- Builds warning-free on GHC 7.10.
- Added a dynamic FromJSON example.
- Updated the link to the paper.
- More examples.
- 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
Proxyis now in
- Added a flag to disable
template-haskellsupport for GHC stage1 platforms.
- Added instances of
- 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.
- Added a workaround for changes in the behavior of the internal ‘Magic’ datatype under the current GHC PolyKinds implementation.
- 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.
- Fixed an issue caused by changes in GHC 7.7’s typechecker by using explicit
- Relaxed an unnecessary strictness annotation in the fast implementation
- 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
slowflag. If you encounter a problem with the implementation, please contact the author.
reflectare about 3 orders of magnitude faster than the special case combinators were.
- Generalized the type signatures in reflect to allow you to pass any type
* -> *wrapped around the desired type as the phantom type argument rather than just a
- Converted from
Data.Proxyfor reflection. This reduces the need for helper functions and scoped type variables in user code.