reflection-0.8: Functional Pearl: Implicit Configurations

Portabilitynon-portable (rank-2 types, type families)
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

Associated Types

type Reflected s Source

Methods

reflect :: p s -> Reflected sSource

Instances

ReifiedNum s => Reified (Stable s a) 

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

Reifying integral values at the type level

class ReifiedNum s whereSource

Methods

reflectNum :: Num a => p 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