[GHC] #14759: ListSetOps WARNING causes tests to fail

GHC ghc-devs at haskell.org
Mon Apr 30 14:54:39 UTC 2018


#14759: ListSetOps WARNING causes tests to fail
-------------------------------------+-------------------------------------
        Reporter:  ezyang            |                Owner:  (none)
            Type:  bug               |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.2.2
      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:D4628
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by niteria):

 Replying to [comment:14 simonpj]:
 > PS. One bad case might be this:
 > {{{
 > import A
 > import B
 > }}}
 > where
 > * A imports A1 which imports A2 .. which import A20, which imports F.
 > * B imports B1 which imports B2 .. which import B20, which imports F.
 > }}}
 > and F has the family instances.  I may have to walk down A.hi, A1.hi...
 to get to F.  But it's painful to walk down B1, B2... etc as well.

 I think you could mitigate this particular bad case if you did "path
 compression", that is instead of keeping the `finst-flag`, you remembered
 the first "interesting" module - a module that either defines it's own
 family instances or imports two modules with different "interesting"
 modules. Or framing it in terms of the current logic, a module is
 "interesting" if the `imp_finst` of a module is a strict superset of
 `imp_finst` of all the imports.

 A harder bad case would be a balanced binary tree of imports where only
 the leaves define type family instances. If you're compiling the root
 you're forced to load the interfaces of all the modules. It's `n`
 interface file loads instead of the minimal `n/2`.

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


More information about the ghc-tickets mailing list