[GHC] #8607: Invalid location reported for type constructors

GHC ghc-devs at haskell.org
Thu Dec 19 05:04:50 UTC 2013


#8607: Invalid location reported for type constructors
-------------------------------------+------------------------------------
        Reporter:  edsko             |            Owner:
            Type:  bug               |           Status:  new
        Priority:  normal            |        Milestone:
       Component:  Compiler          |          Version:  7.7
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------
Changes (by goldfire):

 * owner:  goldfire =>


Comment:

 So, I took a look at this, and it's ugly. The problem is that each
 `TyClDecl` can give rise to potentially many top-level things. Of these
 things, only the `TyCon`s are checked for validity, so we really only need
 location info for `TyCon`s. It's a little painful returning a `[Located
 TyThing]` when the `Located` bit applies to only one disjunct of
 `TyThing`. But, I was willing to deal with that. The real problem comes
 from the fact that one declaration can actually produce many `TyCon`s: a
 class with associated types. According to the validity checking code --
 which checks all `TyCon`s, top-level and not -- we would need these
 associated type `TyCon`s to have correct locations. Unfortunately, there
 is no clean way to get good locations for associated types without
 polluting the code in `tcClassATs` and possibly `ClassATItem`, which is
 persisted within the `Class` datatype. Very yuck.

 Is all of this doable? Absolutely, but it would make Simon wish he had
 just stayed on holiday. So, I propose that, to fix this problem, we store
 location information ''in the `TyCon`''. This should be easy to get
 correct and easy to use. It would be cleaner than adding `Located` in
 various places throughout !TcTyClsDecls. But, it stores location
 information in a very Core-ish place, and I would rather consult with
 others before going ahead with this plan. There is precedent:
 `CoAxBranch`es store locations for similar reasons. But, of course, I was
 the chief person behind `CoAxBranch`es, and it's a little silly to use my
 own design decision as precedent.

 Thoughts?

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


More information about the ghc-tickets mailing list