
#16177: Rename Q (TExp a) to Code a -------------------------------------+------------------------------------- Reporter: mpickering | Owner: (none) Type: feature | Status: new request | Priority: normal | Milestone: Component: Template | Version: 8.6.3 Haskell | Keywords: | Operating System: Unknown/Multiple TypedTemplateHaskell | Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- I propose that we modify the typed template haskell API so that quoting an expression of type `t` results in a value of type `Code t` rather than `Q (TExp a)` and the splice construct requires an argument of type `Code a` to produce a value of type `a`. The definition of `Code` is as follows. {{{ newtype Code a = Code (Q (TExp a)) }}} There are two good reasons to do this. 1. `Q (TExp a)` is ugly and leaks implementation details to the user. Using effects from the `Q` monad is unsafe and against the principle of staged programming. 2. Writing instances for `Q (TExp a)` is quite difficult. It's much easier when the newtype is defined but at the cost of constant wrapping and unwrapping. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16177 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler