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 only
one extension: Rank2Types
Usage reduces to using two combinators.
reify :: a -> (forall s. Reified s => Proxy (s a) -> w) -> w reflect :: Reified s => p (s a) -> a
ghci> reify 6 (\p -> reflect p + reflect p) 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 examples/Monoid.hs).
An additional combinator, that may be more useful when building instances is also
supplied.
reflectT :: Reified s => p s a -> a
Changes in 0.6:
Removed the dependency on multiparameter type classes, functional dependencies, and flexible instances, by making
Reifiesa single parameter type class in the same fashion asReifiesStorable.Moved the building blocks to
Data.Reflection.Internalto 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.Taggedto usingData.Proxyfor reflection. This reduces the need for helper functions and scoped type variables in user code.
Downloads
- reflection-0.6.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, 2.1.9 |
|---|---|
| Dependencies | base (>=4 && <5), tagged (>=0.2.3 && <0.3) [details] |
| License | BSD-3-Clause |
| Copyright | 2009 Edward A. Kmett, 2004 Oleg Kiselyov and Chung-chieh Shan |
| Author | Edward A. Kmett, Oleg Kiselyov and Chung-chieh Shan |
| Maintainer | Edward A. Kmett <ekmett@gmail.com> |
| Uploaded | by EdwardKmett at 2012-04-06T23:34:30Z |
| Category | Data, Reflection, Dependent Types |
| Home page | http://www.cs.rutgers.edu/~ccshan/prepose/prepose.pdf |
| Source repo | head: git clone git://github.com/ekmett/reflection.git |
| Distributions | Arch:2.1.9, Debian:2.1.6, Fedora:2.1.9, FreeBSD:2, LTSHaskell:2.1.9, NixOS:2.1.9, Stackage:2.1.9, openSUSE:2.1.9 |
| Reverse Dependencies | 98 direct, 8468 indirect [details] |
| Downloads | 219493 total (233 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] |