我希望 GHCI 为一个模块加载已编译的目标代码,该模块在编译时比未编译版本快得多。当所有文件都在同一个目录中(没有模块层次结构)时,这工作得很好。但是,当文件位于模块层次结构中时,它们不起作用。
工作版本 MyFile.hs:
import Basic
import Histogram
其中 Basic.o 和 Histogram.o 与 MyFile.hs 位于同一目录中
不工作版本 MyFile.hs:
import Util.Basic
import Util.Histogram
其中 Basic.o 和 Histogram.o 位于子目录 Util 中。使用这个版本,我在加载 MyFile.hs 时得到以下信息:
[1 of 2] Compiling Util.Basic ( Util/Basic.hs, interpreted )
[2 of 2] Compiling Util.Histogram ( Util/Histogram.hs, interpreted )
Ok, modules loaded: Util.Basic, Util.Histogram.
我希望能够在模块中组织我的代码,但仍然可以从使用编译的 o 文件中获得好处。
另外,应该注意的是,自从 o 文件被编译后,源文件并没有改变。
编辑:以下是每个文件的内容:
我的文件.hs
import Util.Basic
import Util.Histogram
实用程序/基本.hs
module Util.Basic () where
实用程序/直方图.hs
module Util.Histogram () where
文件/编译:
$:~/programming/haskell/example-error$ ls
MyFile.hs MyFile.hs~ Util
$:~/programming/haskell/example-error$ cd Util
$:~/programming/haskell/example-error/Util$ ls
Basic.hs Basic.hs~ Histogram.hs Histogram.hs~
$:~/programming/haskell/example-error/Util$ ghc *.hs
[1 of 2] Compiling Util.Histogram ( Histogram.hs, Histogram.o )
[2 of 2] Compiling Util.Basic ( Basic.hs, Basic.o )
$:~/programming/haskell/example-error/Util$ ls
Basic.hi Basic.hs~ Histogram.hi Histogram.hs~
Basic.hs Basic.o Histogram.hs Histogram.o
$:~/programming/haskell/example-error/Util$ cd ../
$:~/programming/haskell/example-error$ ghci -ignore-dot-ghci MyFile.hs
GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 3] Compiling Util.Histogram ( Util/Histogram.hs, interpreted )
[2 of 3] Compiling Util.Basic ( Util/Basic.hs, interpreted )
[3 of 3] Compiling Main ( MyFile.hs, interpreted )
Ok, modules loaded: Util.Basic, Util.Histogram, Main.
*Main>
丹尼尔建议的解决方案:
The fix is to compile the importing file, and the files in the
subdirectory only as a consequence of that, not directly.