Copyright | 2009-2015 Edward Kmett, 2012 Elliott Hird, 2004 Oleg Kiselyov and Chung-chieh Shan |
---|---|

License | BSD3 |

Maintainer | Edward Kmett <ekmett@gmail.com> |

Stability | experimental |

Portability | non-portable |

Safe Haskell | Trustworthy |

Language | Haskell98 |

Reifies arbitrary terms at the type level. Based on the Functional Pearl: Implicit Configurations paper by Oleg Kiselyov and Chung-chieh Shan.

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

The approach from the paper was modified to work with Data.Proxy and streamline the API by Edward Kmett and Elliott Hird.

Usage comes down to two combinators, `reify`

and `reflect`

.

`>>>`

12`reify 6 (\p -> reflect p + reflect p)`

The argument passed along by reify is just a `data `

, 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 `Proxy`

t =
Proxy`examples/Monoid.hs`

).

This version is based on the "slow" path from the `reflection`

package,
but modified to work with the same `Reifies`

class as is provided by the "fast"
path, and to make sure the parameter is `Typeable`

.

This is necessary to work around the changes to `Data.Typeable`

in GHC HEAD.

# Documentation

class Reifies s a | s -> a where