ghc -odir is incompatible with .hs-boot files for hierarchical modules
Steps to reproduce
- Adapt the example of how to compile mutually recursive modules so that the modules involved have hierarchical names:
File S/A.hs:
module S.A where
import S.B( TB(..) )
newtype TA = MkTA Int
f :: TB -> TA
f (MkTB x) = MkTA x
File S/A.hs-boot:
module S.A where
newtype TA = MkTA Int
File S/B.hs:
module S.B where
import {-# SOURCE #-} S.A( TA(..) )
data TB = MkTB !Int
g :: TA -> TB
g (MkTA x) = MkTB x
- Compile as the example suggests, but with -odir:
mkdir out
ghc -odir out -c S/A.hs-boot
Expected behaviour
GHC silently creates the directory out/S and then emits the file A.o-boot in that directory.
Observed behaviour
GHC produces the error message:
touch: cannot touch `out/S/A.o-boot': No such file or directory
Note: this happens with ghc --make as well.
Workaround
Create the directory out/S beforehand.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.0.4 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |