[GHC] #9813: Error when reifying type constructor

GHC ghc-devs at haskell.org
Sat Mar 5 12:05:06 UTC 2016


#9813: Error when reifying type constructor
-------------------------------------+-------------------------------------
        Reporter:  owst              |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Template Haskell  |              Version:  7.8.3
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D1899
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by owst):

 A small status update: this is tricky!

 Replying to [comment:37 goldfire]:
 > In particular, GHC already does dependency analysis and chunking, and it
 would be terribly wrong not to have splicy things depend on everything
 else in the declaration group.

 I can't actually see that this is true for ''untyped'' splices! For
 ''typed'' splices I think it happens in the renamer, here:

   https://github.com/ghc/ghc/blob/master/compiler/rename/RnSplice.hs#L403

 But I haven't found an equivalent for untyped splices.

 > The only problem, I believe, is that type-checking is held off until the
 whole group is renamed. (Splice action happens in the renamer.) It may or
 may not be hard to change that routing.

 Yes, this is indeed the case.

 In particular, renaming of the group happens first, here:

 https://github.com/ghc/ghc/blob/master/compiler/typecheck/TcRnDriver.hs#L558

 before type checking of the group's declarations happens later, here:

 https://github.com/ghc/ghc/blob/master/compiler/typecheck/TcRnDriver.hs#L596

 Since `reify` is called during renaming, it fails since the type
 environments do not contain the names in question.

 I'm a bit stuck as to how to proceed!

 Perhaps the obvious question is: is there a particular reason to run
 untyped splices in the renamer vs the typechecker?

 I assume we can't do proper dependency analysis until after renaming, so
 I'm not sure it's possible to do the dependency sorting 'before' renaming
 (such that we could rename/typecheck non-splicy declarations before splicy
 declarations).

 If we could run untyped splices in the typechecker i.e. after renaming and
 dependency analysis, I assume we would be able to refer to names earlier
 in the dependency ordering.

 Any thoughts/advice that may get me unstuck?

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9813#comment:38>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list