reflection: Functional Pearl: Implicit Configurations

[ bsd3, data, dependent-types, library, reflection ] [ Propose Tags ]

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 Reifies a single parameter type class in the same fashion as ReifiesStorable.

  • 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 a Proxy.

Changes in 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.

Downloads

Maintainer's Corner

Package maintainers

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
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>
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
Uploaded by EdwardKmett at 2012-04-06T23:34:30Z
Distributions Arch:2.1.7, Debian:2.1.6, Fedora:2.1.7, FreeBSD:2, LTSHaskell:2.1.7, NixOS:2.1.7, Stackage:2.1.7, openSUSE:2.1.7
Reverse Dependencies 93 direct, 7658 indirect [details]
Downloads 212129 total (298 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]