Je voudrais que GHCI charge le code objet compilé d'un module qui, une fois compilé, est nettement plus rapide que la version non compilée. Cela fonctionnait bien lorsque tous les fichiers se trouvaient dans le même répertoire (pas de hiérarchie de modules). Cependant, elles ne fonctionnent pas lorsque les fichiers sont dans des hiérarchies de modules.
Version de travail MyFile.hs :
import Basic
import Histogram
où Basic.o et Histogram.o sont dans le même répertoire que MyFile.hs
Version non fonctionnelle MyFile.hs :
import Util.Basic
import Util.Histogram
où Basic.o et Histogram.o sont dans un sous-répertoire Util. Avec cette version, j'obtiens le résultat suivant lors du chargement de 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.
J'aimerais pouvoir organiser mon code en modules tout en bénéficiant des avantages de l'utilisation des fichiers o compilés.
Il convient également de noter que les fichiers sources n'ont pas été modifiés depuis la compilation des fichiers o.
Edits : Voici le contenu de chaque fichier :
MonFichier.hs
import Util.Basic
import Util.Histogram
Util/Basic.hs
module Util.Basic () where
Util/Histogramme.hs
module Util.Histogram () where
Fichiers / Compilation :
$:~/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>
La solution qui a fonctionné comme suggéré par Daniel :
The fix is to compile the importing file, and the files in the
subdirectory only as a consequence of that, not directly.