haskell-mode with sandboxes

时间:2015-02-08 16:53:08

标签: haskell emacs haskell-mode

我尝试了以下内容:

cabal sandbox init

然后制作以下cabal文件。

-- Initial hsource.cabal generated by cabal init.  For further 
-- documentation, see http://haskell.org/cabal/users-guide/

name:                hsource
version:             0.1.0.0
-- synopsis:            
-- description:         
-- license:             
license-file:        LICENSE
author:              abc
maintainer:          abc
-- copyright:           
-- category:            
build-type:          Simple
-- extra-source-files:  
cabal-version:       >=1.10

executable hsource
  main-is:             main.hs
  other-modules:       
  -- other-extensions:    
  build-depends:       base >=4.7 && <4.8, csv
  hs-source-dirs:      src
  default-language:    Haskell2010

现在我安装了CSV包:

cabal install --only-dependencies

现在,当我尝试import Text.CSV然后C-c C-l时,我收到以下错误:

Util/RandomTree.hs:7:8-15: Could not find module ‘Text.CSV’ …
    Use -v to see a list of the files searched for.
Compilation failed.

所以我的问题是,如果在haskell模式下不支持沙盒,或者我错过了一些让它们工作的步骤?

1 个答案:

答案 0 :(得分:1)

确保您拥有:

(add-hook 'haskell-mode-hook 'interactive-haskell-mode)
在您的emacs init文件中

haskell-mode支持不同的GHCi process types。你需要一个使用阴谋的人。

要了解当前应用的流程类型,请使用M-x describe-variable并输入haskell-process-type

我认为haskell模式文档已经过时了;因为,查看源代码时,默认值为auto,如果能够找到 .cabal-sandbox 目录,则会使用cabal-repl。否则,它将使用ghci

因此,如果您的haskell-process-type设置为ghciauto并且无法找到您的cabal沙箱,则会看到您发布的错误。如果它当前设置为ghci,请通过添加以下内容将haskell-process-type更改为cabal-repl

(custom-set-variables
  '(haskell-process-type 'cabal-repl))

到您的emacs init文件并重新启动emacs进程。

此外,您始终可以通过打开命令行,导航到包含.cabal文件的目录并输入cabal repl来确认问题是否特定于emacs。如果可行,那么你的阴谋设置就可以了。