Here is my scenario:
I'm working on a project with the following directories/modules:
|--proj
|-- src
|-- Foo
|-- FooModule1.hs
|-- FooModule2.hs
|-- Bar
|-- BarModule1.hs
BarModule1.hs
looks like this:
module BarModule1 where
import Foo.FooModule1
...
I also have a .cabal
file specifying src
as the hs-source-dirs
and of course both modules are listed in it.
When I am in the file BarModule1.hs
in Emacs and I do C-c C-l it says:
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.
Also I want to use hlint
with flymake-haskell-multi-load
and if I activate that mode with M-x flymake-haskell-multi-load
, hlint
will always show the error that it can't find module Foo.FooModule1
, because it is not aware of the .cabal
file, in which I specify that hs-source-dirs: src
.
So my question is: How can I make haskell-mode
and flymake
/hlint
be aware of my project directory/module tree, so that it finds all modules?
Alternatively, how can I make them aware of the modules specified in my .cabal
file?
As for haskell-mode
set haskell-process-type
to cabal-repl
in your emacs init file and make sure to use interactive-haskell-mode
(not inf-haskell-mode
):
(add-hook 'haskell-mode-hook 'interactive-haskell-mode)
(setq haskell-process-type 'cabal-repl)
My emacs configuration is based on Emacs Prelude. And I also create sandbox for the project with cabal sandbox init
.
For the similar project structure haskell-mode
works well. I am able to C-c C-l load current file into repl without errors. But flycheck
is unable to resolve all modules and highlight import
statements with errors:
Could not find module ‘Foo.FooModule1’
Use -v to see a list of the files searched for.
There is an issue Support Cabal sandboxes in GHC #293 with the solution. You need to create .dir-locals.el
in the proj
root which provides necessary variables.
((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
- is a cabal.sandbox.config
(you may need to create sandbox first) package-db
settingflycheck-ghc-search-path
- is a path to proj/src
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With