
#12853: Unpromoted tuples in TH in correctly accepted by the type checker -------------------------------------+------------------------------------- Reporter: erikd | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.2.1 Component: Compiler (Type | Version: 8.1 checker) | Keywords: Resolution: | TemplateHaskell Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: Other | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by RyanGlScott): * keywords: => TemplateHaskell * cc: RyanGlScott, goldfire (added) Comment: I think there are two unrelated issues at play here. One is the issue that there's an inconsistency between tuples and other type constructors w.r.t. automatic promotion. Namely, most types get automatically promoted to a kind in certain contexts, whereas tuples do not. This is why `ty2`'s TH AST doesn't match that of `ty2'`. The other issue is that this program even typechecks at all. In light of the fact that tuples don't automatically get promoted to kinds, something like `[t| D (Bool, Bool) |]` feels bogus. But you can make it even more bogus if you wanted to: {{{#!hs ty2 <- [t| D (Char, Maybe) |] }}} For better or worse, TH doesn't appear to kind-check its quoted types until they're spliced. Is this desirable? On hand, this allows you to pass around values in `Q` computations that don't necessarily type-check, which can be convenient. On the other hand, not sanity checking TH quotations leads to bizarre results like in the program above. I'm a bit reticent to say we should change the behavior with regards to the second issue, since I feel like it could be a very disruptive breaking change. I've cc'd goldfire to get his opinion on the matter. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12853#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler