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ファイルがコンパイルされてからソースファイルが変更されていないことに注意してください。
編集:各ファイルの内容は次のとおりです。
MyFile.hs
import Util.Basic
import Util.Histogram
Util / Basic.hs
module Util.Basic () where
Util / Histogram.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.