-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Functional Pearl: Implicit Configurations -- -- 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.6: -- -- -- -- Changes in 0.5: -- -- -- -- Changes in 0.4: -- -- @package reflection @version 0.6 -- | 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. module Data.Reflection.Internal class Reified s reflect :: Reified s => proxy (s a) -> a reify :: a -> (forall s. Reified s => Proxy (s a) -> w) -> w reflectT :: Reified s => t s a -> a class ReifiedNum s reflectNum :: (ReifiedNum s, Num a) => proxy s -> a reifyIntegral :: Integral a => a -> (forall s. ReifiedNum s => Proxy s -> w) -> w class ReifiedNums ss reflectNums :: (ReifiedNums ss, Num a) => proxy ss -> [a] reifyIntegrals :: Integral a => [a] -> (forall ss. ReifiedNums ss => Proxy ss -> w) -> w class ReifiedStorable s reflectStorable :: (ReifiedStorable s, Storable a) => proxy (s a) -> a reifyStorable :: Storable a => a -> (forall s. ReifiedStorable s => Proxy (s a) -> w) -> w instance Show Zero instance Show (Twice s) instance Show (Succ s) instance Show (Pred s) instance ReifiedStorable s => Reified (Stable s) instance Unused (Stable s a) instance ReifiedNums s => ReifiedStorable (Store s) instance Unused (Store s a) instance (ReifiedNum s, ReifiedNums ss) => ReifiedNums (Cons s ss) instance ReifiedNums Nil instance Unused (Cons s ss) instance Unused Nil instance ReifiedNum s => ReifiedNum (Pred s) instance ReifiedNum s => ReifiedNum (Succ s) instance ReifiedNum s => ReifiedNum (Twice s) instance ReifiedNum Zero instance Unused (Pred s) instance Unused (Succ s) instance Unused (Twice s) instance Unused Zero -- | 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. module Data.Reflection class Reified s reflect :: Reified s => proxy (s a) -> a reflectT :: Reified s => t s a -> a reify :: a -> (forall s. Reified s => Proxy (s a) -> w) -> w