name: reflection version: 0.7 license: BSD3 license-file: LICENSE author: Edward A. Kmett, Oleg Kiselyov and Chung-chieh Shan maintainer: Edward A. Kmett 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