reflection-0.6: Functional Pearl: Implicit Configurations

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

Data.Reflection.Internal

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 :: proxy (s a) -> aSource

Instances

ReifiedStorable s => Reified (Stable s) 

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

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

Special cases

Reifying integral values as types

class ReifiedNum s whereSource

Methods

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

Instances

ReifiedNum Zero 
ReifiedNum s => ReifiedNum (Pred s) 
ReifiedNum s => ReifiedNum (Succ s) 
ReifiedNum s => ReifiedNum (Twice s) 

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

Reifying lists of integrals values as types

class ReifiedNums ss whereSource

Methods

reflectNums :: Num a => proxy ss -> [a]Source

Instances

ReifiedNums Nil 
(ReifiedNum s, ReifiedNums ss) => ReifiedNums (Cons s ss) 

reifyIntegrals :: Integral a => [a] -> (forall ss. ReifiedNums ss => Proxy ss -> w) -> wSource

Reifying storables values as types

class ReifiedStorable s whereSource

Methods

reflectStorable :: Storable a => proxy (s a) -> aSource

Instances

ReifiedNums s => ReifiedStorable (Store s) 

reifyStorable :: Storable a => a -> (forall s. ReifiedStorable s => Proxy (s a) -> w) -> wSource