Sto usando Haskell versione 7.8.4 su (X) Ubuntu 15.10, con Cabal-Install 1.18 entrambi installati tramite apt
. Non ho tentato di installare nulla di Haskell a mano su questa macchina. Ho impostato una sandbox cabal, ho recuperato e installato un modulo solo per scoprire che lo ghc
non sembra essere in ripresa. ghc -v
sembra suggerire che ho due versioni della libreria cabal che si ombreggiano reciprocamente. Come funziona?GHC non trova il modulo nella sandbox cabale
Sto iniziando con una directory vuota /tmp/haskell-example
poi faccio un 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
poi installo natural-numbers
perché voglio utilizzare il modulo Data.Natural
in un programma. Questa operazione ha successo.
$ 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
posso verificare che il modulo Data.Natural
ha infatti stato installato alla sandbox cabala.
$ 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
poi creare un semplice file Main.hs
che importa Data.Natural
ma non la usa.
module Main where
import Data.Natural
main = putStrLn "Hello World"
Quando provo a ghc Main.hs
compaiono i seguenti:
$ ghc Main.hs
Main.hs:3:8:
Could not find module ‘Data.Natural’
Use -v to see a list of the files searched for.
Con la bandiera verbose abilitato, sembra come se la mia cabala è sempre ombreggiato da una cabala più tardi, che è a sua volta shadowing del prima cabala. Perché sta succedendo?
$ 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:
hai aggiornato il tuo file .cabal? – Sigrlami
@ Sigrlami, ho paura di non capire. Ho una directory chiamata '$ HOME/.cabal' e'/tmp/haskell-example/.cabal-sandbox', ma nessun file '.cabal'. Cosa dovrei fare per aggiornarlo? –
Quando usi il comando 'cabal init' all'interno del tuo progetto sta creando il file' foo.cabal' che descrive tutte le dipendenze necessarie, e devi aggiungerle manualmente. Supponendo che il nome del tuo progetto 'foo'.Ad esempio, https://github.com/sigrlami/pollock/blob/master/pollock.cabal – Sigrlami