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

#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 Keywords: subfolder | Operating System: Unknown/Multiple import submodule cd | Type of failure: GHC rejects Architecture: | valid program Unknown/Multiple | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- I'm taking a huge risk in looking like an idiot, but it's worth trying to attack the elephant in the room. The first response I expect is ''"This is expected behaviour!"''. This is what intuition says, but I disagree. It's a simple problem and the fix should be easy, unless there's some advanced import mechanism that would conflict with the solution that I don't know about. That is exactly where I'm taking the risk in reporting this issue. The problem is simple: 1. Create a folder called "Yes". 2. Create Yes/A.hs with the following code: {{{#!hs module Yes.A where import Yes.B }}} 3. Create Yes/B.hs with the following code: {{{#!hs module Yes.B where }}} 4. Open a terminal in the folder that contains "Yes" and run: {{{ $ ghc Yes/A.hs }}} '''This works fine'''. Now try the following: {{{ $ cd Yes Yes/ $ ghc A.hs }}} You'll be greeted with the beautiful error: {{{ A.hs:3:8: Could not find module ‘Yes.B’ Use -v to see a list of the files searched for. }}} A screenshot is worth the above thousand words: http://i.imgur.com/8AxRa0K.png '''This is silly'''. Running with the -v option shows that ghc is not looking for Yes/B.hs, but Yes/Yes/B.hs. I can understand ''why'' it looks there, but not why ghc isn't just this ''tiny'' bit more intelligent in knowing where to look. After all, the module name tells ghc ''exactly'' in which subfolder it is located: {{{#!hs module Yes.A where -- This module is very likely to be in Yes/, because otherwise a name inconsistency error is thrown. }}} '''Proposed solution:''' The module name tells ghc exactly where it is located. If Yes.A imports Yes.B, then you know that they're in the same subfolder. Simple as that. Instead of ignoring that information and looking for Yes/Yes/B.hs, it should simply look for Yes/B.hs. Relative to ghc (which is run from Yes/) this would be ./B.hs. This solution is scalable. Imagine a module Ding.Dong.Biddly.Bong that imports Ding.Dong.Doodle.Bell. Running "ghc Bong.hs" from Ding/Dong/Biddly/ should '''not''' make it look for "Ding/Dong/Biddly/Ding/Dong/Doodle/Bell.hs", but for Ding/Dong/Doodle/Bell.hs. Relative to ghc (run from Ding/Dong/Biddly/), this would be ../Doodle/Bell.hs. So yeah, right now ghc is arbitrarily restricted to run from the root of the source directory. This '''looks''' like intended behaviour until you realise that the silly bug mentioned here is probably the only thing that prevents ghc from running from ''any'' subfolder. Of course there are the -i and :set options for ghc that allows one to work around this, but one should not be expected to jump through all the -iFile hoops to be allowed to run ghc from any arbitrary subdirectory of the source folder. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by thomie): What if there ''is'' a file `Yes/Yes/B.hs` containing `module Yes.B where`? Currently, `cd Yes; ghc A.hs` would work then. There was another ticket on the same subject recently, but I can't find it at the moment. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by FPtje): {{{ falco ~/Downloads/Yes$ mkdir Yes falco ~/Downloads/Yes$ mv B.hs Yes/ falco ~/Downloads$ find Yes Yes Yes/Yes Yes/Yes/B.hs Yes/A.hs falco ~/Downloads/Yes$ ghci A.hs GHCi, version 7.10.1: http://www.haskell.org/ghc/ :? for help [1 of 2] Compiling Yes.B ( Yes/B.hs, interpreted ) [2 of 2] Compiling Yes.A ( A.hs, interpreted ) Ok, modules loaded: Yes.A, Yes.B. }}} Yes, like I said, it looks for Yes/Yes/B.hs. Puting B.hs in Yes/Yes will make ghc work with loading A.hs from Yes/, but that will break running ghc in the root of the source: {{{ falco ~/Downloads/Yes$ cd .. falco ~/Downloads$ ghci Yes/A.hs GHCi, version 7.10.1: http://www.haskell.org/ghc/ :? for help Yes/A.hs:3:8: Could not find module ‘Yes.B’ Use -v to see a list of the files searched for. Failed, modules loaded: none. Prelude> }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by svenpanne): I think the current behavior is not silly at all, and the proposed solution will very probably lead to confusion in non-trivial settings: Assume that you have the following directory/file structure: Foo/Yes/A.hs Bar/Yes/B.hs with the same contents as in the OP. GHC(i) can happily load this if you set the right import paths and give the module name, not the file name: {{{ $ ghci -iFoo:Bar Yes.A GHCi, version 7.10.1.20150630: http://www.haskell.org/ghc/ :? for help [1 of 2] Compiling Yes.B ( Bar/Yes/B.hs, interpreted ) [2 of 2] Compiling Yes.A ( Foo/Yes/A.hs, interpreted ) Ok, modules loaded: Yes.A, Yes.B. }}} So the assumption that a module name tells GHC exactly the location of the subfolder is wrong, the import path effectively overlays several directories. This is standard behavior for lots of compilers/interpreters which is needed for more complicated projects, and I don't think we should change that. As it is, it is already complicated enough, putting some "clever" magic into GHC just to avoid a single commandline option is not the way to go. How does your proposal interact with the import path? How can one avoid accidentally finding the wrong module? Should filenames on the commandline be handled differently from module names? IMHO the answers to these questions are far from obvious and the potential gain (saving a single commandline flag) doesn't outweigh the introduced complexity. P.S.: What do you mean by "name inconsistency error"? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by FPtje): Shouldn't the -i problem you mention be resolved simply by giving those folder the highest priority? Standard behaviour for lots of compilers and interpreters? Haskell is a different language altogether. Rules from other compilers do not necesarily apply. The extra search paths aren't "clever magic", just an extra place to look for modules. It doesn't have to make anything more complicated. Finding wrong modules shouldn't happen, at least not in the example you provided. Especially when -i paths have priority over the other paths. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by svenpanne): I think the point where we disagree is what you call the ''"-i problem"'': For me it's not a problem at all, it's as easy as it gets without being too clever and confusing, and it's standard behavior (compare with e.g. C/C++'s include path handling). And ''"ghc is arbitrarily restricted to run from the root of the source directory"'' is not correct, either: It is just the case (again standard behavior) that the default search path just contains "." (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/separate- compilation.html#search-path). Regarding finding wrong modules: Extend your example Yes/A.hs (containing module Yes.A) Yes/B.hs (containing module Yes.b) with Yes/Yes/B.hs (containing module Yes.Yes.B) With your proposal when your cwd is the top-level "Yes", "ghc A.hs" would pick up the file containing Yes.Yes.B, which is not what you want, although it's in the perfectly right location. Another problem is: No build system of any kind should blindly go upwards in the directory hierarchy because of symbolic links, only downwards. And finally: In any non-toy program, having a single -i option is your least problem, so you will have a .cabal file, anyway. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

With your proposal when your cwd is the top-level "Yes", "ghc A.hs" would pick up the file containing Yes.Yes.B, which is not what you want I'm not sure what you mean exactly, but I tried this with current ghc, and it already does find the module. However, since the Yes/Yes/B.hs contains Yes.Yes.B, and A.hs tries to import Yes.B, a module name mismatch error occurs (see screenshot: http://i.imgur.com/hQuh8dx.png). It doesn't seem
#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by FPtje): like this would be a problem. The screenshot also shows that the behaviour is the same when I append the search path that I request to be added by default. I'm not saying that "." in the search path should be ''replaced'' by my proposition, rather, I suggest that a path needs to be added with the lowest priority. That way, all previous behaviour should remain unchanged, with the exception that it should find modules that it arguably should have in the first place. '''About why this problem in general should be fixed:'''
In any non-toy program, having a single -i option is your least problem, so you will have a .cabal file, anyway.
This issue is generalised to just compiling, because that is where this bug lies. The bug makes development a huge nuisance. Personally I like working on a single file, having it loaded in ghci. The power of ghci is that it can load any single haskell file and work with it, executing single functions. However, simply going to the folder containing the haskell file, opening up a terminal and running ghci will often have you run into this bug, forcing you to either cd to the root folder or give the root folder to -i. This is annoying, but it also makes writing linters unnecessarily difficult. This linter (https://github.com/SublimeLinter/SublimeLinter- ghc) for example simply runs ghc -Wall on any haskell file open in the Sublime text editor. Since ghc is run from some arbitrary location, it gives a meaningless result when it hits this bug. The same happens when pressing the "Build" button in sublime, which just runs "runhaskell $file". The only way for Sublime and sublimelinter-ghc to solve this problem is to try to find out the root path of the source and either give that to ghc/runhaskell or put that in an -i option. This would involve searching for cabal files, parsing haskell files, having the user set it manually or other things that go way beyond the idea of ''"tools that run a command on a file and show a pretty output in the text editor"''. The responsibility of this issue lies with the source of the problem: ghc not realising that the source file containing Yes.B might just very well be right next to the source file of Yes.A. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by svenpanne): Simply trying to run ''"ghc -Wall"'' (plus a few warning/error-related flags) is just way to naive to be helpful for any non-toy program: Apart from being agnostic about the project root, this way you don't have a clue about which additional packages are needed and must be specified on the commandline, too. Furthermore, you might need to enable some GHC extensions, define some preprocessor symbols etc. This is exactly what .cabal files are for and why they are declarative, and any non-toy tool should use these as a basis. This situation is not much different from other language environments/IDEs, which all have some kind of "project file" (under varying names). Linting Java without setting the right CLASSPATH? No way... Linting C/C++ without setting the right include search paths and preprocessor symbols? No way... Perhaps you might want to have a look at the haskell-mode for Emacs, it does exactly what you want in a saner way, i.e. by looking at a potential .cabal file. Before I sound even more like Grumpy Cat on a really bad day, I'd like to hear from others what they think about this proposal. ;-) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by FPtje):
Simply trying to run "ghc -Wall" (plus a few warning/error-related flags) is just way to naive to be helpful for any non-toy program Nonsense! ''ghc -Wall'' works fine when this issue is fixed/worked around! http://i.imgur.com/CxHO2S5.png
Besides, even if there are ''other'' hurdles that would make ghc -Wall not work for single files in bigger projects, that does not mean that this issue should not be resolved.
[...] other language environments/IDEs
[...] haskell-mode for Emacs, it does exactly what you want in a saner way
At the risk of sounding even grumpier, the core of this issue lies with ghc not finding modules that it arguably should. Therefore, the responsibility lies with ghc to solve it. You can tell me to use emacs and you can tell me that IDE's for other languages need more information before they can lint code, but that won't make the problem go away for ghc. The proposed fix isn't that difficult, makes proper sense given how the folder structure vs. module name works and should (AFAIK) not break any backwards compatibility. I don't see why you would want to throw this away at face value before expecting everyone who uses runhaskell, ghci and ghc to just work around it while stating "that's how IDEs/haskell linters do it". -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by svenpanne): Simply saying "nonsense" is... well, nonsense. :-) As I already said several times: For very simple programs you might get away without specifying non-exposed packages, GHC extensions, preprocessor defines etc. on the commandline, but in general you simply don't, just take a look at a few packages on Hackage. So any tool not looking at a .cabal file (or somewhere else where similar information is stored, wherever that may be) is fundamentally flawed and restricted to toy problems. And there's still the problem that in general tools which go up in the directory hierarchy have problems when symbolic links are involved: `cd Yes; cd ..` is not always a no-op. I still fail to see what's wrong with using runghc/ghc/ghci from the top directory of your project or why that's considered to be so complicated... -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Operating System: Unknown/Multiple | import submodule cd Type of failure: GHC rejects | Architecture: valid program | Unknown/Multiple Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by FPtje):
Simply saying "nonsense" is... well, nonsense. That's why I provided a screenshot. Please see my explanation on '''other hurdles''' on why that is no reason to not fix that issue
I still fail to see what's wrong with using runghc/ghc/ghci from the top directory of your project or why that's considered to be so complicated...
The complicated bit is having your linter find out where that directory is. To repeat myself:
The only way for Sublime and sublimelinter-ghc to solve this problem is to try to find out the root path of the source and either give that to ghc/runhaskell or put that in an -i option. This would involve searching for cabal files, parsing haskell files, having the user set it manually or other things that go way beyond the idea of "tools that run a command on a file and show a pretty output in the text editor".
Symbolic links should be looked at. Depending on how ghc mounts its libraries, that might be doable. I don't know the specifics, but even if that's the next bug, it's much better to not be able to deal with symbolic links than this issue. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 goldfire): Chiming in here at Sven's request (at the end of comment:7), though I don't feel strongly: I think the original request is reasonable, well-specified, backward compatible, and straightforward to implement. I also think that the objections raised here are reasonable, in that users experienced in other languages would find the proposed behavior unexpected and that the limitation in GHC described here seems unlikely to bite in non-trivial situations. So I think the best way around this impasse is to see what other users think. After all, I think the burden lies with the requester of a new feature to ensure that public opinion agrees with the request before anyone considers implementing. This is especially true with simple user- facing changes like this one. So, @FPtje, gather a groundswell of support for this feature request, and it will be given more consideration. In any case, thanks to both of you for your impassioned arguments above -- users who care about their software is what makes open-source software great. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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 Miloan): Just like @FPtje, I have experienced this problem. For me it is counter- intuitive to have to compile the code from the root folder. Maybe this origins from my experience with other compilers. While I do agree that GHC is not your average compiler, it would not hurt to conform to some standards. The proposed solution is exactly how I imagined the compiler worked when I started programming Haskell. That's why I believe it would be a great addition to GHC. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#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

#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: #3140 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by thomie): * related: => #3140 Comment: Also reported as #3140, in a Windows setting (double clicking `Yes/A.hs` doesn't work). -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10643#comment:14 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC