[GHC] #10077: Providing type checker plugin on command line results in false cyclic import error

GHC ghc-devs at haskell.org
Tue Feb 10 13:58:10 UTC 2015


#10077: Providing type checker plugin on command line results in false cyclic
import error
-------------------------------------+-------------------------------------
        Reporter:  jbracker          |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  Compiler (Type    |                 Version:  7.11
  checker)                           |                Keywords:
      Resolution:                    |  typechecker plugin cycle imports
Operating System:  Linux             |            Architecture:  x86_64
 Type of failure:  Incorrect         |  (amd64)
  warning at compile-time            |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by adamgundry):

 Replying to [comment:4 jbracker]:
 > Replying to [comment:2 adamgundry]:
 > > This is arguably correct behaviour, though I agree that it's less than
 ideal. The combination of `--make` and `-fplugin` is often troublesome,
 because `-fplugin MyPlugin` essentially imports `MyPlugin` in every module
 being compiled.
 >
 > I have trouble understanding why a plugin needs to be imported to the
 module that uses it. As far as I understand GHC dynamically loads the
 plugin module and uses it, but I don't see why the plugin needs to be
 imported to the compiled module, since the modules do not have access to
 the plugins functionality anyway. Is this required because the plugin
 might import other modules in scope? Or is there some other technical
 reason?

 To try to clarify: it's not exactly true that the plugin needs to be
 **imported** into a module that uses it, although I believe the
 implementation works more-or-less like that, with some cleverness to avoid
 e.g. typeclass instances being brought in. The point is that if module `M`
 uses a plugin in module `P`, then we have to dynamically load `P` in order
 to typecheck `M`. Hence `P` cannot depend (directly or indirectly) on `M`!

 When `-fplugin=P` is used on the command-line, GHC tries to load `P` for
 every module being compiled, which might include `P` itself. This isn't
 exactly a cyclic import, but it's pretty close.


 > > I've added a [wiki:Plugins/TypeChecker#FAQ section to the typechecker
 plugins wiki page] documenting these issues. Suggestions for improvement
 are welcome!
 >
 > Maybe a link to this ticket, in case someone wants to know more about
 the issue?

 Yes. Done.

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


More information about the ghc-tickets mailing list