Tôi đang sử dụng phiên bản Haskell 7.8.4 trên (X) Ubuntu 15.10, với Cabal-Install 1.18 được cài đặt thông qua apt
. Tôi đã không cố cài đặt bất kỳ thứ gì liên quan đến Haskell bằng tay trên máy này. Tôi thiết lập một hộp cát cabal, lấy và cài đặt một mô-đun chỉ để khám phá rằng ghc
dường như không chọn nó lên. ghc -v
dường như gợi ý rằng tôi có hai phiên bản của thư viện cabal đang lẫn nhau che khuất nhau. Cái này hoạt động ra sao?GHC không thể tìm thấy mô-đun trong hộp cát cabal
Tôi bắt đầu với một thư mục rỗng /tmp/haskell-example
sau đó tôi làm một cabal sandbox init
.
$ 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
sau đó tôi cài đặt natural-numbers
vì tôi muốn sử dụng các mô-đun Data.Natural
trong một chương trình. Thao tác này thành công.
$ 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
Tôi có thể xác minh rằng mô-đun Data.Natural
thực sự đã được cài đặt vào hộp cát cabal.
$ 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
sau đó tôi tạo một tệp đơn giản Main.hs
nhập Data.Natural
nhưng không sử dụng.
module Main where
import Data.Natural
main = putStrLn "Hello World"
Khi tôi cố gắng ghc Main.hs
tôi thấy như sau:
$ ghc Main.hs
Main.hs:3:8:
Could not find module ‘Data.Natural’
Use -v to see a list of the files searched for.
Với lá cờ tiết được kích hoạt, nó có vẻ như thể cabal của tôi là nhận được lu mờ bởi một cabal sau, đó là lần lượt shadowing sự cabal trước đó. Tại sao chuyện này đang xảy ra?
$ 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:
bạn đã cập nhật tệp .cabal của mình chưa? – Sigrlami
@ Sigigami Tôi sợ rằng tôi không hiểu. Tôi có một thư mục gọi là '$ HOME/.cabal' và'/tmp/haskell-example/.cabal-sandbox', nhưng không có tệp '.cabal'. Tôi cần phải làm gì để cập nhật nó? –
Khi bạn đang sử dụng lệnh 'cabal init' bên trong dự án của bạn là tạo tệp 'foo.cabal' mô tả tất cả các phụ thuộc cần thiết và bạn cần phải thêm chúng theo cách thủ công. Giả sử tên dự án của bạn 'foo'.Ví dụ: https://github.com/sigrlami/pollock/blob/master/pollock.cabal – Sigrlami