2010-06-01 25 views
6

gelen işlevi yüklenmemesi, ben: GHCi olarakGHCi test.hs ise dosyadan

doubleMe x = x + x 

, ben yazın:

Prelude> :l test 
[1 of 1] Compiling Main    (test.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> doubleMe 9 

<interactive>:1:0: Not in scope: `doubleMe' 
*Main> 

Neden? Nasıl düzeltilir?

cevap

4

Doğru sınama yüklediğinizden emin misiniz? Belki yanlış dizindesiniz. Ya da doubleMe'nin tanımını ekledikten sonra test.hs kaydetmediniz.

+2

Masaüstünde bir klasörün kısayolu yerine bir klasör oluşturmuştum. –

5
  1. Kaldır test.hi ve test.o dizinden sonra ghci test deneyin. [Bazen ghc file.hs (ve ghc --make file.hs değil) çalıştırdığımda, tanımsız başvuru hatası verir, ancak daha sonra ghci tarafından okunan dosyaları oluşturur. Belki bu bir hatadır.]

  2. GHCi içinde

    :cd "<path to your file>" 
    :l test 
    :browse 
    

    deneyin. Sonuç nedir?

+0

OS X 10.11.6 ve GHCI 8.2.2'de ' 'nda çift tırnak kullanmanız gerekmez. ': Cd yolunu deneyebilirsiniz. – Elmex80s

29

Tahminimce, kaynak dosyanızda bir ana işlev tanımladınız.

main işlevini tanımladıysanız, modülü :l test ile yüklemek, main işlevlerini çağırmaz. Bu durumda, modül adına bir asterix hazırlayarak yükleyebilirsiniz: :l *test. Nedeni, derlenmiş ikili dosyaların, dışa aktarılamayan üst düzey işlevleri gizlemesidir. Bir asteriksin hazırlanması, GHCi'yi önceden derlenmiş modülü (test) yok saymaya zorlar ve bunun yerine kaynak dosyasını yorumlayacaktır (test.hs).

[jkramer/sgi5k:.../haskell]# cat test.hs 

main = do 
    print $ doubleMe 2 

doubleMe x = x + x 

[jkramer/sgi5k:.../haskell]# ghc --make test 
[jkramer/sgi5k:.../haskell]# ghci 
[...some messages...] 
>> :l test 
Ok, modules loaded: Main. 
>> :t doubleMe 

<interactive>:1:0: Not in scope: `doubleMe' 
>> :l *test 
[1 of 1] Compiling Main    (test.hs, interpreted) 
Ok, modules loaded: Main. 
>> :t doubleMe 
doubleMe :: (Num a) => a -> a 

Kontrol fazla bilgi için bu bağlantıları:

http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/ghci-compiled.html http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/interactive-evaluation.html#ghci-scope

+3

Bu op'un sorunu değildi, ama sen benim problemimi çözdün. * Module_name trick için teşekkürler. – Saterus

+0

Bu benim için çalışmıyor. İlk olarak, testi yükledikten sonra komut istemi, >> yerine> Ana> gibi görünecektir. Ayrıca bana diyerek bir hata iletisi alıyorum: Modül bulunamadı * * fadetoblack ': -v Aranan dosyaların listesini görmek için -v kullanın. –

0

Bu da başıma - ve durumda başkasının bu sayfa boyunca içine çalışır ve Tökezlemeler, benim konu oldu GHCI'yi çalıştırdığım VM, disk alanı dışındaydı - her seferinde boş bir dosya yüklemeyi denemesini istedi.