reflection: Functional Pearl: Implicit Configurations
This package provides an implementation of the ideas presented in the paper
"Functional Pearl: Implicit Configurations" by Oleg Kiselyov and
Chung-chieh Shan. However, the API has been modified to use TypeFamilies
and
the implementation has been streamlined to improve performance.
The original paper can be obtained from http://www.cs.rutgers.edu/~ccshan/prepose/prepose.pdf
Changes in 1.0:
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 implementation, please contact the author.
Changes in 0.9:
Faster internal implementation, about 40 percent faster than 0.8.
Removed
ReifiedNum
,reflectNum
, andreifyIntegral
;reify
andreflect
are considerably faster than the special case combinators were.
Changes in 0.8:
Switched to using type families to avoid a problem where the user could cast
Proxy (s a) -> Proxy (s b)
and get back a values with the wrong type under the API in effect from 0.6. This API yields a much nicer example as well.Removed
reflectT
as it no longer makes sense.Added a more advanced example
example/Constraints.hs
using constraint kinds.
Changes in 0.7:
Uses a much simpler construction where
reify
now converts aStablePtr
to anIntPtr
and reifies that directly as an integral type rather than serializing and storing the StablePtr as a list of bytes as proposed in the original paper.Removed
ReifiedStorable
andReifiedNums
.Since we have so many fewer classes now,
Data.Reflection.Internal
was merged back intoData.Reflection
Changes in 0.6:
Removed the dependency on multiparameter type classes, functional dependencies, and flexible instances, by making
Reifies
a single parameter type class in the same fashion asReifiesStorable
.Moved the building blocks to
Data.Reflection.Internal
to reduce API clutter.Added
reflectT
Changes in 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 aProxy
.
Changes in 0.4:
Converted from
Data.Tagged
to usingData.Proxy
for reflection. This reduces the need for helper functions and scoped type variables in user code.
[Skip to Readme]
Flags
Automatic Flags
Name | Description | Default |
---|---|---|
slow | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- reflection-1.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.0.0, 0.1.0, 0.1.1, 0.2.0, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.5, 0.4.0, 0.4.0.1, 0.4.0.2, 0.4.1, 0.4.1.1, 0.5, 0.5.0.1, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.5.1, 1.1.6, 1.1.7, 1.2.0.1, 1.3, 1.3.1, 1.3.2, 1.4, 1.5.1, 1.5.1.1, 1.5.1.2, 1.5.2, 1.5.2.1, 2, 2.1, 2.1.1, 2.1.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5, 2.1.6, 2.1.7, 2.1.8 |
---|---|
Dependencies | base (>=4 && <5), tagged (>=0.2.3 && <0.3) [details] |
License | BSD-3-Clause |
Copyright | 2009-2012 Edward A. Kmett, 2012 Elliott Hird, 2004 Oleg Kiselyov and Chung-chieh Shan |
Author | Edward A. Kmett, Elliott Hird, Oleg Kiselyov and Chung-chieh Shan |
Maintainer | Edward A. Kmett <ekmett@gmail.com> |
Category | Data, Reflection, Dependent Types |
Home page | http://github.com/ekmett/reflection |
Source repo | head: git clone git://github.com/ekmett/reflection.git |
Uploaded | by EdwardKmett at 2012-04-07T10:36:03Z |
Distributions | Arch:2.1.7, Debian:2.1.6, Fedora:2.1.7, FreeBSD:2, LTSHaskell:2.1.8, NixOS:2.1.8, Stackage:2.1.8, openSUSE:2.1.7 |
Reverse Dependencies | 94 direct, 7783 indirect [details] |
Downloads | 214783 total (417 in the last 30 days) |
Rating | 2.25 (votes: 2) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |