-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Reifies arbitrary terms into types that can be reflected back into terms -- @package reflection @version 2 -- | Reifies arbitrary terms at the type level. Based on the Functional -- Pearl: Implicit Configurations paper by Oleg Kiselyov and Chung-chieh -- Shan. -- -- http://okmij.org/ftp/Haskell/tr-15-04.pdf -- -- The approach from the paper was modified to work with Data.Proxy and -- to cheat by using knowledge of GHC's internal representations by -- Edward Kmett and Elliott Hird. -- -- Usage comes down to two combinators, reify and reflect. -- --
-- >>> 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). -- -- In addition, a simpler API is offered for working with singleton -- values such as a system configuration, etc. module Data.Reflection class Reifies s a | s -> a reflect :: Reifies s a => proxy s -> a -- | Reify a value at the type level, to be recovered with reflect. reify :: a -> (forall (s :: *). Reifies s a => Proxy s -> r) -> r -- | This upgraded version of reify can be used to generate a -- KnownNat suitable for use with other APIs. -- -- Available only on GHC 7.8+ -- --
-- >>> reifyNat 4 natVal -- 4 ---- --
-- >>> reifyNat 4 reflect -- 4 --reifyNat :: Integer -> (forall (n :: Nat). KnownNat n => Proxy n -> r) -> r -- | This upgraded version of reify can be used to generate a -- KnownSymbol suitable for use with other APIs. -- -- Available only on GHC 7.8+ -- --
-- >>> reifySymbol "hello" symbolVal -- "hello" ---- --
-- >>> reifySymbol "hello" reflect -- "hello" --reifySymbol :: String -> (forall (n :: Symbol). KnownSymbol n => Proxy n -> r) -> r -- | Reify a value at the type level in a Typeable-compatible -- fashion, to be recovered with reflect. -- -- This can be necessary to work around the changes to -- Data.Typeable in GHC HEAD. reifyTypeable :: Typeable a => a -> (forall (s :: *). (Typeable s, Reifies s a) => Proxy s -> r) -> r -- | This is a version of Reifies that allows for only a single -- value. -- -- This is easier to work with than Reifies and permits extended -- defaulting, but it only offers a single reflected value of a given -- type at a time. class Given a given :: Given a => a -- | Reify a value into an instance to be recovered with given. -- -- You should only give a single value for each type. If -- multiple instances are in scope, then the behavior is implementation -- defined. give :: a -> (Given a => r) -> r -- | This can be used to generate a template haskell splice for a type -- level version of a given int. -- -- This does not use GHC TypeLits, instead it generates a numeric type by -- hand similar to the ones used in the "Functional Pearl: Implicit -- Configurations" paper by Oleg Kiselyov and Chung-Chieh Shan. -- -- instance Num (Q Exp) provided in this package allows writing -- $(3) instead of $(int 3). Sometimes the two will -- produce the same representation (if compiled without the -- -DUSE_TYPE_LITS preprocessor directive). int :: Int -> TypeQ -- | This is a restricted version of int that can only generate -- natural numbers. Attempting to generate a negative number results in a -- compile time error. Also the resulting sequence will consist entirely -- of Z, D, and SD constructors representing the number in zeroless -- binary. nat :: Int -> TypeQ data Z data D (n :: *) data SD (n :: *) data PD (n :: *) instance Typeable T0 instance Typeable T1 instance Typeable T2 instance Typeable T3 instance Typeable T4 instance Typeable T5 instance Typeable T6 instance Typeable T7 instance Typeable T8 instance Typeable T9 instance Typeable T10 instance Typeable T11 instance Typeable T12 instance Typeable T13 instance Typeable T14 instance Typeable T15 instance Typeable T16 instance Typeable T17 instance Typeable T18 instance Typeable T19 instance Typeable T20 instance Typeable T21 instance Typeable T22 instance Typeable T23 instance Typeable T24 instance Typeable T25 instance Typeable T26 instance Typeable T27 instance Typeable T28 instance Typeable T29 instance Typeable T30 instance Typeable T31 instance Typeable T32 instance Typeable T33 instance Typeable T34 instance Typeable T35 instance Typeable T36 instance Typeable T37 instance Typeable T38 instance Typeable T39 instance Typeable T40 instance Typeable T41 instance Typeable T42 instance Typeable T43 instance Typeable T44 instance Typeable T45 instance Typeable T46 instance Typeable T47 instance Typeable T48 instance Typeable T49 instance Typeable T50 instance Typeable T51 instance Typeable T52 instance Typeable T53 instance Typeable T54 instance Typeable T55 instance Typeable T56 instance Typeable T57 instance Typeable T58 instance Typeable T59 instance Typeable T60 instance Typeable T61 instance Typeable T62 instance Typeable T63 instance Typeable T64 instance Typeable T65 instance Typeable T66 instance Typeable T67 instance Typeable T68 instance Typeable T69 instance Typeable T70 instance Typeable T71 instance Typeable T72 instance Typeable T73 instance Typeable T74 instance Typeable T75 instance Typeable T76 instance Typeable T77 instance Typeable T78 instance Typeable T79 instance Typeable T80 instance Typeable T81 instance Typeable T82 instance Typeable T83 instance Typeable T84 instance Typeable T85 instance Typeable T86 instance Typeable T87 instance Typeable T88 instance Typeable T89 instance Typeable T90 instance Typeable T91 instance Typeable T92 instance Typeable T93 instance Typeable T94 instance Typeable T95 instance Typeable T96 instance Typeable T97 instance Typeable T98 instance Typeable T99 instance Typeable T100 instance Typeable T101 instance Typeable T102 instance Typeable T103 instance Typeable T104 instance Typeable T105 instance Typeable T106 instance Typeable T107 instance Typeable T108 instance Typeable T109 instance Typeable T110 instance Typeable T111 instance Typeable T112 instance Typeable T113 instance Typeable T114 instance Typeable T115 instance Typeable T116 instance Typeable T117 instance Typeable T118 instance Typeable T119 instance Typeable T120 instance Typeable T121 instance Typeable T122 instance Typeable T123 instance Typeable T124 instance Typeable T125 instance Typeable T126 instance Typeable T127 instance Typeable T128 instance Typeable T129 instance Typeable T130 instance Typeable T131 instance Typeable T132 instance Typeable T133 instance Typeable T134 instance Typeable T135 instance Typeable T136 instance Typeable T137 instance Typeable T138 instance Typeable T139 instance Typeable T140 instance Typeable T141 instance Typeable T142 instance Typeable T143 instance Typeable T144 instance Typeable T145 instance Typeable T146 instance Typeable T147 instance Typeable T148 instance Typeable T149 instance Typeable T150 instance Typeable T151 instance Typeable T152 instance Typeable T153 instance Typeable T154 instance Typeable T155 instance Typeable T156 instance Typeable T157 instance Typeable T158 instance Typeable T159 instance Typeable T160 instance Typeable T161 instance Typeable T162 instance Typeable T163 instance Typeable T164 instance Typeable T165 instance Typeable T166 instance Typeable T167 instance Typeable T168 instance Typeable T169 instance Typeable T170 instance Typeable T171 instance Typeable T172 instance Typeable T173 instance Typeable T174 instance Typeable T175 instance Typeable T176 instance Typeable T177 instance Typeable T178 instance Typeable T179 instance Typeable T180 instance Typeable T181 instance Typeable T182 instance Typeable T183 instance Typeable T184 instance Typeable T185 instance Typeable T186 instance Typeable T187 instance Typeable T188 instance Typeable T189 instance Typeable T190 instance Typeable T191 instance Typeable T192 instance Typeable T193 instance Typeable T194 instance Typeable T195 instance Typeable T196 instance Typeable T197 instance Typeable T198 instance Typeable T199 instance Typeable T200 instance Typeable T201 instance Typeable T202 instance Typeable T203 instance Typeable T204 instance Typeable T205 instance Typeable T206 instance Typeable T207 instance Typeable T208 instance Typeable T209 instance Typeable T210 instance Typeable T211 instance Typeable T212 instance Typeable T213 instance Typeable T214 instance Typeable T215 instance Typeable T216 instance Typeable T217 instance Typeable T218 instance Typeable T219 instance Typeable T220 instance Typeable T221 instance Typeable T222 instance Typeable T223 instance Typeable T224 instance Typeable T225 instance Typeable T226 instance Typeable T227 instance Typeable T228 instance Typeable T229 instance Typeable T230 instance Typeable T231 instance Typeable T232 instance Typeable T233 instance Typeable T234 instance Typeable T235 instance Typeable T236 instance Typeable T237 instance Typeable T238 instance Typeable T239 instance Typeable T240 instance Typeable T241 instance Typeable T242 instance Typeable T243 instance Typeable T244 instance Typeable T245 instance Typeable T246 instance Typeable T247 instance Typeable T248 instance Typeable T249 instance Typeable T250 instance Typeable T251 instance Typeable T252 instance Typeable T253 instance Typeable T254 instance Typeable T255 instance Typeable W instance Typeable Stable instance (B b0, B b1, B b2, B b3, B b4, B b5, B b6, B b7, w0 ~ W b0 b1 b2 b3, w1 ~ W b4 b5 b6 b7) => Reifies (Stable w0 w1 a) a instance B T255 instance B T254 instance B T253 instance B T252 instance B T251 instance B T250 instance B T249 instance B T248 instance B T247 instance B T246 instance B T245 instance B T244 instance B T243 instance B T242 instance B T241 instance B T240 instance B T239 instance B T238 instance B T237 instance B T236 instance B T235 instance B T234 instance B T233 instance B T232 instance B T231 instance B T230 instance B T229 instance B T228 instance B T227 instance B T226 instance B T225 instance B T224 instance B T223 instance B T222 instance B T221 instance B T220 instance B T219 instance B T218 instance B T217 instance B T216 instance B T215 instance B T214 instance B T213 instance B T212 instance B T211 instance B T210 instance B T209 instance B T208 instance B T207 instance B T206 instance B T205 instance B T204 instance B T203 instance B T202 instance B T201 instance B T200 instance B T199 instance B T198 instance B T197 instance B T196 instance B T195 instance B T194 instance B T193 instance B T192 instance B T191 instance B T190 instance B T189 instance B T188 instance B T187 instance B T186 instance B T185 instance B T184 instance B T183 instance B T182 instance B T181 instance B T180 instance B T179 instance B T178 instance B T177 instance B T176 instance B T175 instance B T174 instance B T173 instance B T172 instance B T171 instance B T170 instance B T169 instance B T168 instance B T167 instance B T166 instance B T165 instance B T164 instance B T163 instance B T162 instance B T161 instance B T160 instance B T159 instance B T158 instance B T157 instance B T156 instance B T155 instance B T154 instance B T153 instance B T152 instance B T151 instance B T150 instance B T149 instance B T148 instance B T147 instance B T146 instance B T145 instance B T144 instance B T143 instance B T142 instance B T141 instance B T140 instance B T139 instance B T138 instance B T137 instance B T136 instance B T135 instance B T134 instance B T133 instance B T132 instance B T131 instance B T130 instance B T129 instance B T128 instance B T127 instance B T126 instance B T125 instance B T124 instance B T123 instance B T122 instance B T121 instance B T120 instance B T119 instance B T118 instance B T117 instance B T116 instance B T115 instance B T114 instance B T113 instance B T112 instance B T111 instance B T110 instance B T109 instance B T108 instance B T107 instance B T106 instance B T105 instance B T104 instance B T103 instance B T102 instance B T101 instance B T100 instance B T99 instance B T98 instance B T97 instance B T96 instance B T95 instance B T94 instance B T93 instance B T92 instance B T91 instance B T90 instance B T89 instance B T88 instance B T87 instance B T86 instance B T85 instance B T84 instance B T83 instance B T82 instance B T81 instance B T80 instance B T79 instance B T78 instance B T77 instance B T76 instance B T75 instance B T74 instance B T73 instance B T72 instance B T71 instance B T70 instance B T69 instance B T68 instance B T67 instance B T66 instance B T65 instance B T64 instance B T63 instance B T62 instance B T61 instance B T60 instance B T59 instance B T58 instance B T57 instance B T56 instance B T55 instance B T54 instance B T53 instance B T52 instance B T51 instance B T50 instance B T49 instance B T48 instance B T47 instance B T46 instance B T45 instance B T44 instance B T43 instance B T42 instance B T41 instance B T40 instance B T39 instance B T38 instance B T37 instance B T36 instance B T35 instance B T34 instance B T33 instance B T32 instance B T31 instance B T30 instance B T29 instance B T28 instance B T27 instance B T26 instance B T25 instance B T24 instance B T23 instance B T22 instance B T21 instance B T20 instance B T19 instance B T18 instance B T17 instance B T16 instance B T15 instance B T14 instance B T13 instance B T12 instance B T11 instance B T10 instance B T9 instance B T8 instance B T7 instance B T6 instance B T5 instance B T4 instance B T3 instance B T2 instance B T1 instance B T0 instance Num Exp instance Num Type instance Fractional a => Fractional (Q a) instance Num a => Num (Q a) instance Reifies n Int => Reifies (PD n) Int instance Reifies n Int => Reifies (SD n) Int instance Reifies n Int => Reifies (D n) Int instance Reifies Z Int instance KnownSymbol n => Reifies n String instance KnownNat n => Reifies n Integer