[GHC] #10643: GHC cannot import submodules when run from subfolder

GHC ghc-devs at haskell.org
Sun Jul 19 15:35:47 UTC 2015


#10643: GHC cannot import submodules when run from subfolder
-------------------------------------+-------------------------------------
        Reporter:  FPtje             |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  Compiler          |                 Version:  7.10.1
      Resolution:                    |                Keywords:  subfolder
                                     |  import submodule cd
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by rodlogic):

 It would surprise me, should I see something like the following:
 {{{
 src/Yes/A.hs (module Yes.A ...)
 src/Yes/B.hs (module Yes.B ...)
 src/Yes/Yes/B.hs (module Yes.B ...)
 }}}

 Maybe the above structure is useful to deal with conditionally compiled
 modules such as platform specific ones? Or some other use case that can't
 be achieved with a less surprising structure? Even in those cases why not
 keep the structure normalized? Such as:
 {{{
 src/Yes/A.hs (module Yes.A ...)
 src/Yes/B.hs (module Yes.B ...)
 src/Yes/Windows/B.hs (module Yes.Windows.B ...)
 }}}
 Or even a completely separate include path for the platform specific
 modules assuming the module names don't clash.

 The above is clearer and simpler to me. That assumes:
 1. The module structure must match the file system structure (WYSIWYG) -
 what is the value we get from this variability here? Another similar
 example of this is the fact that Cabal doesn't complain that a file
 {{{../xyz.cabal}}} may have a cabal package named {{{MyYesPackage}}}.
 2. No clever nesting of module tree within module tree making thing more
 complicated. There is probably not much GHC can do here since it is more
 of a best practice that not everyone may agree with.

 If we can agree on (1) above, then I find this proposal quite reasonable.
 As I understand it, this would mean that GHC should be able to infer an
 include path based on the current module file and that this include path
 would take precedence over the current path, which seems to be already an
 implicit include dir (?).

 I would go even further and have GHC outright reject, or at least warn
 first then completely reject after a couple of releases, a module
 structure that doesn't match the file system structure.

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


More information about the ghc-tickets mailing list