reflection-0.7: reflection.cabal
name: reflection
version: 0.7
license: BSD3
license-file: LICENSE
author: Edward A. Kmett, Oleg Kiselyov and Chung-chieh Shan
maintainer: Edward A. Kmett <ekmett@gmail.com>
stability: experimental
homepage: http://www.cs.rutgers.edu/~ccshan/prepose/prepose.pdf
category: Data, Reflection, Dependent Types
synopsis: Functional Pearl: Implicit Configurations
copyright: 2009 Edward A. Kmett, 2004 Oleg Kiselyov and Chung-chieh Shan
build-type: Simple
cabal-version: >= 1.6
description:
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.7/:
.
* Uses a much simpler construction where @reify@ now converts a @StablePtr@ to an
@IntPtr@ 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@ and @ReifiedNums@.
.
* Since we have so many fewer classes now, @Data.Reflection.Internal@ was merged back
into @Data.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 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.
extra-source-files: examples/Monoid.hs
source-repository head
type: git
location: git://github.com/ekmett/reflection.git
library
other-extensions: Rank2Types
build-depends:
base >= 4 && < 5,
tagged >= 0.2.3 && < 0.3
exposed-modules: Data.Reflection
ghc-options: -Wall