2017-08-14 4 views
6

Je peux stack build un projet de la ligne de commande, mais quand j'essaie C-c C-l dans emacs (avec (custom-set-variables '(haskell-process-type 'stack-ghci))), je reçois une erreur que tout le paquet les modules que j'importe ne peuvent pas être trouvés.Dans Emacs stack-ghci ne peut pas charger les fichiers d'interface, mais «stack build» à partir de la ligne de commande

/home/amcp011/bec/amcp011/accelerate/gpe/src/Numeric/GPE/Utils.hs:30:1: error: 
    Failed to load interface for ‘Data.Array.Accelerate’ 
    Locations searched: 
     Data/Array/Accelerate.hs 
     Data/Array/Accelerate.lhs 
     Data/Array/Accelerate.hsig 
     Data/Array/Accelerate.lhsig 
     /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.hs 
     /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.lhs 
     /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.hsig 
     /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.lhsig 

gpe.cabal:

build-depends:  base >= 4.7 && < 5 
        , bytestring 
        , bytestring-conversion 
        , mtl 
        , time 
        , filepath 
        , directory 
        , accelerate 
        , accelerate-io 

stack.yaml:

extra-deps: [accelerate-1.0.0.0 
      ,accelerate-io-1.0.0.0 
      ] 
+1

-vous arrive d'avoir un lien public à ce projet? Il est difficile de déboguer sans un exemple ... – Alec

+0

@Alec: https://github.com/amcphail/gpe Ce n'est pas fini, j'ai téléchargé en réponse à votre commentaire. Je suis en phase de développement où il est utile de charger des fichiers dans emacs. – vivian

Répondre

5

j'ai pu compiler votre projet avec stack build (bien sûr, après l'installation de quelques systèmes larges dépendances comme LLVM, cuda, fftw3 etc.) et chargez-le bien avec C-c C-l dans emacs.

Voici la configuration emacs minimale qui a fonctionné pour moi:

(defun haskell-mode-setup() 
    (setq haskell-process-type 'stack-ghci)) 

(add-hook 'haskell-mode-hook 'interactive-haskell-mode) 
(add-hook 'haskell-mode-hook 'haskell-mode-setup) 

La seule façon que j'ai pu reproduire le problème que vous rencontrez est avec inf-haskell-mode, au lieu de interactive-haskell-mode, ainsi que tout simplement en mettant (setq haskell-process-type 'ghci). Ainsi, il est possible qu'emacs ne trouve pas stack.

Je vous recommande d'essayer de faire savoir à haskell-mode où est la pile, dans le cas où il est installé dans un emplacement non commun: (setq haskell-process-path-stack "/path/to/stack").

Alternativement, j'ai résolu quelques problèmes dans le passé liés à $PATH variable d'environnement n'étant pas le même qui est défini pour l'utilisateur actuel, mais celui qui est utilisé à l'échelle du système. Il suffit d'installer le paquet emacs exec-path-from-shell et d'ajouter (exec-path-from-shell-initialize) au ~/.emacs. De plus, si vous ne l'avez pas encore fait, l'inspection du journal en mode haskell peut s'avérer utile. Ajouter (setq haskell-process-log t) à haskell-mode-setup, ce qui entraînera un tampon supplémentaire avec le journal.

Notes:

  • Pour compiler votre paquet, je devais retirer quelques lignes de stack.yaml, à savoir celles qui comprennent dirs locaux /home/amcp011/local/, qui ne sont pas inclus dans le repo et utiliser mon système installé à la place gcc d'un de RHEL6.3.
  • Si vous utilisez d'autres packages emacs en plus de haskell-mode, ils peuvent également être la cause du problème. Je l'ai testé avec intero et flycheck sans aucun problème. Essayez la mise à niveau vers la plus récente stack upgrade et haskell-mode, peut-être que cela aidera. Je l'ai testé avec stack-1.5.1 et haskell-mode-20170824.1124 sur emacs-25.2.2