packages feed

reflection-1.0: reflection.cabal

name:           reflection
version:        1.0
license:        BSD3
license-file:   LICENSE
author:         Edward A. Kmett, Elliott Hird, Oleg Kiselyov and Chung-chieh Shan
maintainer:     Edward A. Kmett <ekmett@gmail.com>
stability:      experimental
homepage:       http://github.com/ekmett/reflection
category:       Data, Reflection, Dependent Types
synopsis:       Functional Pearl: Implicit Configurations
copyright:      2009-2012 Edward A. Kmett,
                2012 Elliott Hird,
                2004 Oleg Kiselyov and Chung-chieh Shan
build-type:     Simple
cabal-version:  >= 1.10
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 @TypeFamilies@ and
  the implementation has been streamlined to improve performance.
  .
  The original paper can be obtained from <http://www.cs.rutgers.edu/~ccshan/prepose/prepose.pdf>
  .
  /Changes in 1.0/:
  .
  * Much faster implementation available that is about 50 /times/ faster than 0.9 and which runs
    purely on black magic. This version is now used by default. To turn it off install with the
    'slow' flag. If you encounter a problem with implementation, please contact the author.
  .
  /Changes in 0.9/:
  .
  * Faster internal implementation, about 40 percent faster than 0.8.
  .
  * Removed @ReifiedNum@, @reflectNum@, and @reifyIntegral@; @reify@ and @reflect@ are
    considerably faster than the special case combinators were.
  .
  /Changes in 0.8/:
  .
  * Switched to using type families to avoid a problem where the user could cast
    @Proxy (s a) -> Proxy (s b)@ and get back a values with the wrong type under
    the API in effect from 0.6. This API yields a much nicer example as well.
  .
  * Removed @reflectT@ as it no longer makes sense.
  .
  * Added a more advanced example @example/Constraints.hs@ using constraint kinds.
  .
  /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
  examples/Constraints.hs
  examples/Benchmark.hs
  README
  slow/Data/Reflection.hs
  fast/Data/Reflection.hs

flag slow
  default: False
  manual: False

source-repository head
  type: git
  location: git://github.com/ekmett/reflection.git

library
  default-language: Haskell2010
  other-extensions: Rank2Types, TypeFamilies
  if !flag(slow) && impl(ghc)
    other-extensions: GADTs
    hs-source-dirs: fast
  else
    default-extensions: CPP
    other-extensions: ScopedTypeVariables
    hs-source-dirs: slow
  if flag(slow) && impl(ghc)
    other-extensions: MagicHash
  build-depends:
    base >= 4 && < 5,
    tagged >= 0.2.3 && < 0.3
  exposed-modules: Data.Reflection
  ghc-options: -Wall