
#10384: "Can't splice the polymorphic local variable" check looks dead -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: task | Status: new Priority: normal | Milestone: Component: Template Haskell | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: None/Unknown | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by simonpj): I don't think it's dead: * In `RnSplice.checkCrossStageLifting` you'll see that it applies ONLY if the stage is `RnPendingUntyped`, i.e. we are renaming the body of an untyped bracket. It does nothing for typed brackets. So what is happening in `RnSplice` is that we treat `[| ...x...|]` as equivalent to `[| ...(lift x)... |]`, which seems right. But what should happen for ''typed'' splices? Presumably, `[|| ...x....||]` should be equivalent to `[|| ....$(tlift x).... ||]`, where {{{ tlift :: Lift t => t -> TExp t }}} It shouldn't matter if `x` has a polymorphic type, because it'll be instantiated by its context. We might need to whiz up a new `SplicePointName` though. But we don't seem to have `tlift` or anything like it. I'm puzzled. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10384#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler