packages feed

reflection-0.6: reflection.cabal

name:           reflection
version:        0.6
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.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
    Data.Reflection.Internal
  ghc-options: -Wall