2011-07-07 20 views
26

Benim haskell uygulama aşağıdaki dizin yapısı vardır:Haskell/GHCi - farklı dizinlerden yükleme modülleri

src/ 
    utils/Utils.hs 
    subsystem/Subsystem.hs 

Subsystem modül ithalatı Utils modülü. Bu kodu GHCi'de test etmek istiyorum.

sorun GHCi sadece '.' (geçerli dizinde) kullanılabilir modüllerin arayan gibi görünüyor, bu yüzden klasör alt sistemini etmek Utils.hs kopyalanan ve el-testi için Subsytem.hs başardı. Bunu yapmanın daha iyi bir yolu var mı? Örneğin, GHCi'yi src dizininde başlatmak ve ./utils ve ./subsystem dizinlerindeki modülleri aramak istiyorum. GHCi'ye bir modül yolu belirleyebilir miyim?

cevap

9

Varsayılan olarak, GHC modülleri ararken, Foo.Bar değerini Foo/Bar.hs olarak yorumlar. Dolayısıyla, tek bir projeniz varsa, üst düzey dizinde olarak Utils modülüne ve Utils/Fishcakes.hs olarak Utils.Fishcakes modülüne sahip olabilirsiniz. Utils.hs'un Utils adlı bir dizinin yanında olabileceğini veya her ikisinin de bağımsız olarak var olabileceğini unutmayın. Ortak bir stil, hiyerarşideki altındaki modülleri basitçe yeniden dışa aktarmak için en üst düzey modülü kullanma eğilimindedir, ancak bu gerekli değildir. GHC User Guide, yukarıdaki davranışları ve diğer hangi seçeneklerin desteklendiğini açıklamayı içerir.

Bildiğim kadarıyla, çoğu durumda kod, yukarıdaki varsayılan yapıyı kullanır, bir kabin yapısının parçası olarak belirtilen başka bir yapı kullanır veya kitaplık olarak yüklenmesini bekler.

+0

Yanıt için teşekkürler. Aşağıdakileri yaparak sorunu düzeltebildim: Utils.Utils ve Alt Sistem'i içeren Utils.hs ve Subsystem.hs dosyalarını içeren src/create Utils ve Subsystem dizinleri.Alt sistem modülleri. Sonra GHCi'yi src'den çalıştırabilir ve sonra sadece şunu yapabilir: Subsystem.Subsystem'ı ekleyebilirim. – simon

7

Böyle bir şey ile bir .ghci dosyası oluşturabilirsiniz set -isrc -iutils -isubsystem

3

Eğer görünüyor proje, aşağıdaki ...

src/ 
    utils/Utils.hs 
    subsystem/Subsystem.hs 
..... 
myproject.cabal 
Setup.hs 

gibi Sen Projenin kök dizininde bir .ghci dosyası oluşturabilir, src, myproject.cabal ve myproject.cabal ve 'un bulunduğu dizin. .gchi içeriği bu olmalıdır.

:set -isrc/utils -isrc/subsystem 

Artık projenizin kök dizininden ghci'yi arayabilir ve bağlı tüm modülleri otomatik olarak yükleyecektir.

$ ghci 
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Prelude>:load src/subsystem/Subsystem.hs 
... should load Subsystem.hs 
İlgili konular