2014-06-26 17 views
11

Ecco il mio piano d'azione:Haskell-mode non funziona per il mio progetto, non riesce a trovare il modulo

Sto lavorando su un progetto con le seguenti directory/moduli:

|--proj 
    |-- src 
     |-- Foo 
      |-- FooModule1.hs 
      |-- FooModule2.hs 
     |-- Bar 
      |-- BarModule1.hs 

BarModule1.hs assomiglia questo:

module BarModule1 where 

import Foo.FooModule1 
... 

ho anche un file che specifica .cabalsrc come hs-source-dirs e, naturalmente, entrambi i moduli sono elencati in esso.

Quando sono nel file BarModule1.hs in Emacs e faccio Cc Cl si dice:

proj/src/Bar/BarModule1.hs:3:8: 
    Could not find module `Foo.FooModule1' 
    Use -v to see a list of the files searched for. 
Failed, modules loaded: none. 

Anche io voglio utilizzare hlint con flymake-haskell-multi-load e se attivo che la modalità con Mxflymake-haskell-multi-load, hlint mostrerà sempre l'errore che non riesce a trovare il modulo Foo.FooModule1, perché non è a conoscenza del file .cabal, in cui specifichi che hs-source-dirs: src.

Quindi la mia domanda è: Come posso fare haskell-mode e flymake/hlint essere a conoscenza del mio progetto directory/modulo di albero, in modo che trova tutti i moduli?

In alternativa, come posso renderli consapevoli dei moduli specificati nel file .cabal?

+0

Se si utilizza un file di cabala, allora perché non usare la stessa cabala? Prima assicurati che il tuo buffer corrente sia un file nella stessa cartella del tuo file .cabal, quindi 'C-u M-x compila RET cabal repl RET' – user2407038

+0

Quale versione di haskell-mode stai usando? L'ultimo e il più grande è molto consapevole della cabala. Lo stesso vale per GHC-mode IIRC – jozefg

+0

C-u M-x compilare RET cabala repl RET lavora per il repl, ma non risolve il problema flymake/hlint Sto usando Haskell-mode 13,7 – Stephen

risposta

2

Al prompt in ghci: :set -iproj/src/

+0

questo risolve il C-c C-l problema, grazie. Tuttavia, flymake con hlint non ne risentirà e segnerà la prima riga di importazione con "Impossibile trovare il modulo" – Stephen

3

Per quanto riguarda haskell-mode impostato haskell-process-type-cabal-repl nei vostri emacs file di inizializzazione e assicurarsi di utilizzare interactive-haskell-mode (non inf-haskell-mode):

(add-hook 'haskell-mode-hook 'interactive-haskell-mode) 
(setq haskell-process-type 'cabal-repl) 
3

La mia configurazione emacs si basa su Emacs Prelude. E creo anche sandbox per il progetto con cabal sandbox init.

Per la struttura di progetto simile haskell-mode funziona bene. Sono in grado di C-c C-l caricare il file corrente in repl senza errori. Ma flycheck è in grado di risolvere tutti i moduli ed evidenziare import dichiarazioni con errori:

Could not find module ‘Foo.FooModule1’ 
Use -v to see a list of the files searched for. 

C'è un problema Support Cabal sandboxes in GHC#293 con la soluzione. È necessario creare .dir-locals.el nella radice proj che fornisce le variabili necessarie.

((haskell-mode 
    (flycheck-ghc-package-databases "/path/to/proj/.cabal-sandbox/x86_64-osx-ghc-7.6.3-packages.conf.d/") 
    (flycheck-ghc-no-user-package-database . t) 
    (flycheck-ghc-search-path "/path/to/proj/src"))) 
  • flycheck-ghc-package-databases - è un cabal.sandbox.config (potrebbe essere necessario creare sandbox prima) package-db impostazione
  • flycheck-ghc-search-path - è un percorso per proj/src
Problemi correlati