2015-12-07 22 views
5

modülünü bulamıyor. (X) Ubuntu 15.10 üzerinde Haskell sürüm 7.8.4 kullanıyorum, Cabal-Install 1.18 her ikisi de apt aracılığıyla yüklenir. Bu makinede Haskell ile ilgili herhangi bir şey kurmaya çalışmadım. Bir cabal sandbox kurdum, sadece ghc'un onu almayıp görmediğini keşfetmek için bir modül taktım ve kurdum. ghc -v, karşılıklı olarak birbirini gölgeleyen kabal kütüphanesinin iki versiyonuna sahip olduğumu gösteriyor. Bu nasıl çalışıyor?GHC, cabal sandbox

boş bir dizine /tmp/haskell-example

ile başlıyorum sonra bir cabal sandbox init yapmak. Bir programda Data.Natural modülünü kullanmak istiyorum çünkü

$ cabal sandbox init 
Writing a default package environment file to 
/tmp/haskell-example/cabal.sandbox.config 
Creating a new sandbox at /tmp/haskell-example/.cabal-sandbox 

sonra natural-numbers yükleyin. Bu işlem başarılı.

$ cabal install natural-numbers 
Resolving dependencies... 
Notice: installing into a sandbox located at 
/tmp/haskell-example/.cabal-sandbox 
Configuring natural-numbers-0.1.2.0... 
Building natural-numbers-0.1.2.0... 
Installed natural-numbers-0.1.2.0 

Ben Data.Natural modül gerçekten cabal sanal alana kurulduğunu doğrulayabilir.

$ ls /tmp/haskell-example/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/natural-numbers-0.1.2.0 
Data 
libHSnatural-numbers-0.1.2.0.a 
libHSnatural-numbers-0.1.2.0-ghc7.8.4.so 
$ ls /tmp/haskell-example/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/natural-numbers-0.1.2.0/Data 
Natural.dyn_hi 
Natural.hi 

sonra Data.Natural ithal ama bunu kullanmayan bir basit Main.hs dosyası oluşturun. Ben ghc Main.hs çalıştığınızda

module Main where 

import Data.Natural 

main = putStrLn "Hello World" 

aşağıdaki bakın: my cabal gölgeleme sırayla bir sonraki cabal, gölgesinde oluyor sanki etkin ayrıntılı bayrak ile

$ ghc Main.hs 
Main.hs:3:8: 
    Could not find module ‘Data.Natural’ 
    Use -v to see a list of the files searched for. 

, öyle görünüyor daha önceki kabalık. Bu neden oluyor?

$ ghc -v Main.hs 
Glasgow Haskell Compiler, Version 7.8.4, stage 2 booted by GHC version 7.8.4 
Using binary package database: /usr/lib/ghc/package.conf.d/package.cache 
hiding package Cabal-1.18.1.5 to avoid conflict with later version Cabal-1.22.1.1 
wired-in package ghc-prim mapped to ghc-prim-0.3.1.0-ec14d2f6075975a2ce9112eae431c8e1 
wired-in package integer-gmp mapped to integer-gmp-0.5.1.0-de4898ebdc5ab81cedce89121ae9ac84 
wired-in package base mapped to base-4.7.0.2-5ef1e7e809bc3b18d74efc783356e209 
wired-in package rts mapped to builtin_rts 
wired-in package template-haskell mapped to template-haskell-2.9.0.0-c1976a420ad8b9b589eee08844c59ba2 
wired-in package dph-seq not found. 
wired-in package dph-par not found. 
Hsc static flags: 
hiding package Cabal-1.18.1.5 to avoid conflict with later version Cabal-1.22.1.1 
wired-in package ghc-prim mapped to ghc-prim-0.3.1.0-ec14d2f6075975a2ce9112eae431c8e1 
wired-in package integer-gmp mapped to integer-gmp-0.5.1.0-de4898ebdc5ab81cedce89121ae9ac84 
wired-in package base mapped to base-4.7.0.2-5ef1e7e809bc3b18d74efc783356e209 
wired-in package rts mapped to builtin_rts 
wired-in package template-haskell mapped to template-haskell-2.9.0.0-c1976a420ad8b9b589eee08844c59ba2 
wired-in package dph-seq not found. 
wired-in package dph-par not found. 
*** Chasing dependencies: 
Chasing modules from: *Main.hs 

Main.hs:3:8: 
    Could not find module ‘Data.Natural’ 
    Locations searched: 
    Data/Natural.hs 
    Data/Natural.lhs 
*** Deleting temp files: 
Deleting: 
*** Deleting temp dirs: 
Deleting: 
+0

.cabal dosyanızı güncellediniz mi? – Sigrlami

+0

@Sigrlami Korkarım Anlamadım. '$ HOME/.cabal' ve '/ tmp/haskell-example/.cabal-sandbox' adlı bir dizim var, ancak' .cabal' dosyası yok. Güncellemek için ne yapmam gerekir? –

+0

Projeniz içinde 'cabal init 'komutunu kullandığınızda, gerekli tüm bağımlılıkları açıklayan foo.cabal dosyası oluşturulur ve bunları manuel olarak eklemeniz gerekir. Proje adınızı 'foo' kabul ederek.Örneğin, https://github.com/sigrlami/pollock/blob/master/pollock.cabal – Sigrlami

cevap

6

Manuel hack içine iseniz, gibi, bir kum kutusu pkg db konumunu ghc geçirebilirsiniz: kum havuzları kullanmak için "normal" yolu daima kullanarak derlemek etmektir Ancak

ghc Main.hs -package-db .cabal-sandbox/x86_64-linux-ghc-7.10.2-packages.conf.d/ 

Ghc'yi doğrudan çalıştırmak yerine cabal build (veya cabal install parametresi olmadan).

  1. Run cabal init, sen
  2. Düzenleme çıkan foo.cabal dosyası (foo Paketinizin adıdır) istedikleri gibi sorulara cevap.
  3. cabal build veya cabal install'dan çalıştırın - bu sizin için ghc'yi çalıştırır.

Kablolu dosyayı düzenlerken, dışa aktarılan modüllerin (bir lib dosyasıysa) listelendiğini ve ana src'nizin doğru olduğunu kontrol edin. Ayrıca, natural-numbers gibi bağımlılıkların build-depends: maddesinde listelendiğinden emin olun.

+1

Bir saniye bekleyin. Sanırım "kabal" ı tamamen yanlış bir şekilde düşünüyordum. Bir virtualenv veya npm ortamı gibi davranmak ve ghc davranışını değiştirmek için bir cabal sandbox bekliyordum, ama sadece benzerlik, 'cabal install' şeyleri yükler nereye yönlendirir olduğu gibi görünüyor. Bu şimdi çok mantıklı. –