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