packages feed

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