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 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 . /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