reflection-0.7: Functional Pearl: Implicit Configurations

Portabilitynon-portable (rank-2 types)
Stabilityexperimental
MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellSafe-Infered

Data.Reflection

Contents

Description

Based on the Functional Pearl: Implicit Configurations paper by Oleg Kiselyov and Chung-chieh Shan.

http://www.cs.rutgers.edu/~ccshan/prepose/prepose.pdf

Modified to minimize extensions and work with Data.Proxy rather than explicit scoped type variables and undefined values by Edward Kmett.

Synopsis

Reifying any term at the type level

class Reified s whereSource

Methods

reflect :: p (s a) -> aSource

Instances

ReifiedNum s => Reified (Stable s) 

reify :: a -> (forall s. Reified s => Proxy (s a) -> w) -> wSource

reflectT :: Reified s => t s a -> aSource

Reifying integral values at the type level

class ReifiedNum s whereSource

Methods

reflectNum :: Num a => proxy s -> aSource

Instances

ReifiedNum Zero 
ReifiedNum s => ReifiedNum (PredTwice s) 
ReifiedNum s => ReifiedNum (SuccTwice s) 
ReifiedNum s => ReifiedNum (Twice s) 

reifyIntegral :: Integral a => a -> (forall s. ReifiedNum s => Proxy s -> w) -> wSource