2014-10-17 9 views
5

Sto lavorando a un progetto e sto utilizzando Cabal per la gestione. Ho specificato la directory dei file di origine, i moduli, tutto il resto. Tutti i miei file hanno lo stesso nome dei loro moduli corrispondenti, il caso è conservato.GHCi non trova i moduli del mio programma

posso fare:

$ cabal configure 
$ cabal build 

senza problemi.

Tuttavia, immagino di avere un modulo Module nel file Module.hs e il file File.hs nella stessa directory. Ora, quando sto cercando di caricare File.hs da Emacs per la prova, ottengo il seguente:

____Could not find module ‘Module’ 
    It is a member of the hidden package ‘ghc-7.8.3’. 
    Use -v to see a list of the files searched for. 
Failed, modules loaded: none. 

intero contenuto File.hs:

module File where 
import Module 

come farlo trovare i file del mio progetto?

risposta

4

È necessario comunicare a GHCi dove trovare i file sorgente. Ad esempio, se la directory del progetto è ./foo e avete i file di origine in ./foo/src avete bisogno di dire (dalla cartella del progetto):

:set -isrc 

al prompt dei comandi in GHCi. Avrai quindi accesso ai membri privati ​​nel tuo file sourc caricato con C-c C-l.

È inoltre necessario assicurarsi che non sia stato installato il pacchetto cabal install, altrimenti il ​​pacchetto verrà caricato, non i file di origine del progetto.

+0

Perfetto! Funziona come un fascino! – Mark

5

È possibile avviare il REPL via Cabal in questo modo:

# cabala repl

Questa è la stessa cosa che lanciare ghci, ma terrà conto di eventuali ulteriori dipendenze installate dalla cabala installare il pacchetto locale o sandbox repository.

+1

Bene, carica solo tutto, non un file specifico. Non ho accesso a funzioni non pubbliche nel modulo su cui sto lavorando. Mi piace fare 'C-c C-l' e caricare il modulo corrente in GHCi, è abbastanza conveniente. Forse c'è un modo per salvare questo flusso di lavoro ... Grazie comunque per la risposta. – Mark

+1

Dopo aver avviato il repl, è possibile importare un singolo file sorgente direttamente con ': load'. Ad esempio: ': carica MyFile.hs' Ciò consentirà quindi l'accesso diretto ai membri interni/privati ​​ –

Problemi correlati