Correctly setting up emacs + ghc-mod

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Correctly setting up emacs + ghc-mod

Arnaud Bailly-2
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

signature.asc (507 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Correctly setting up emacs + ghc-mod

Andras Slemmer
If you're using several source directories then simply specify them in your .cabal with hs-source-dirs. So for example if you have a library in src/lib and a test-suite in src/test and your tests use your lib then you'd have something like this in your .cabal

library
  exposed-modules: Lib
  hs-source-dirs: src/lib

test-suite sometest
  type:           exitcode-stdio-1.0
  main-is:        Test.hs
  hs-source-dirs: src/test src/lib



On 18 April 2014 16:20, Arnaud Bailly <[hidden email]> wrote:
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe



_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: Correctly setting up emacs + ghc-mod

Arnaud Bailly-2
This is what I have in my cabal file:

library
    hs-source-dirs: ., fay-shared
    exposed-modules: Application
                     Foundation

 

but I keep getting same error when loading a file that depends on the fay-shared directory (please not that command-line building with cabal runs fine so this is definitely an issue with my emacs settings).

Here is the output I got in haskell interpreter when loading a file that depends on fay-shared/SharedTypes.hs:

GHCi is ignoring: /home/vagrant/yesod-splittest/.ghci (run M-x haskell-process-unignore)                                                                                                                    
The next big Haskell project is about to start!
If I break, you can:
  1. Restart:           M-x haskell-process-restart
  2. Configure logging: C-h v haskell-process-log (useful for debugging)
  3. General config:    M-x customize-mode
  4. Hide these tips:   C-h v haskell-process-show-debug-tips
Changed directory: /home/vagrant/yesod-splittest/
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
λ> 

Thanks
Arnaud

 
On 19 Apr 2014, at 13:05, Andras Slemmer <[hidden email]> wrote:

If you're using several source directories then simply specify them in your .cabal with hs-source-dirs. So for example if you have a library in src/lib and a test-suite in src/test and your tests use your lib then you'd have something like this in your .cabal

library
  exposed-modules: Lib
  hs-source-dirs: src/lib

test-suite sometest
  type:           exitcode-stdio-1.0
  main-is:        Test.hs
  hs-source-dirs: src/test src/lib



On 18 April 2014 16:20, Arnaud Bailly <[hidden email]> wrote:
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

signature.asc (507 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Correctly setting up emacs + ghc-mod

Zsolt Dollenstein-3
Have you tried M-x haskell-process-unignore?


On Sun, Apr 20, 2014 at 10:20 AM, Arnaud Bailly <[hidden email]> wrote:
This is what I have in my cabal file:

library
    hs-source-dirs: ., fay-shared
    exposed-modules: Application
                     Foundation

 

but I keep getting same error when loading a file that depends on the fay-shared directory (please not that command-line building with cabal runs fine so this is definitely an issue with my emacs settings).

Here is the output I got in haskell interpreter when loading a file that depends on fay-shared/SharedTypes.hs:

GHCi is ignoring: /home/vagrant/yesod-splittest/.ghci (run M-x haskell-process-unignore)                                                                                                                    
The next big Haskell project is about to start!
If I break, you can:
  1. Restart:           M-x haskell-process-restart
  2. Configure logging: C-h v haskell-process-log (useful for debugging)
  3. General config:    M-x customize-mode
  4. Hide these tips:   C-h v haskell-process-show-debug-tips
Changed directory: /home/vagrant/yesod-splittest/
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
λ> 

Thanks
Arnaud

 
On 19 Apr 2014, at 13:05, Andras Slemmer <[hidden email]> wrote:

If you're using several source directories then simply specify them in your .cabal with hs-source-dirs. So for example if you have a library in src/lib and a test-suite in src/test and your tests use your lib then you'd have something like this in your .cabal

library
  exposed-modules: Lib
  hs-source-dirs: src/lib

test-suite sometest
  type:           exitcode-stdio-1.0
  main-is:        Test.hs
  hs-source-dirs: src/test src/lib



On 18 April 2014 16:20, Arnaud Bailly <[hidden email]> wrote:
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe



_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: Correctly setting up emacs + ghc-mod

Arnaud Bailly-2
Yes, but only once on ‘.’ I suspect from your answer I should do it for all directories ?


On 20 Apr 2014, at 16:28, Zsolt Dollenstein <[hidden email]> wrote:

Have you tried M-x haskell-process-unignore?


On Sun, Apr 20, 2014 at 10:20 AM, Arnaud Bailly <[hidden email]> wrote:
This is what I have in my cabal file:

library
    hs-source-dirs: ., fay-shared
    exposed-modules: Application
                     Foundation

 

but I keep getting same error when loading a file that depends on the fay-shared directory (please not that command-line building with cabal runs fine so this is definitely an issue with my emacs settings).

Here is the output I got in haskell interpreter when loading a file that depends on fay-shared/SharedTypes.hs:

GHCi is ignoring: /home/vagrant/yesod-splittest/.ghci (run M-x haskell-process-unignore)                                                                                                                    
The next big Haskell project is about to start!
If I break, you can:
  1. Restart:           M-x haskell-process-restart
  2. Configure logging: C-h v haskell-process-log (useful for debugging)
  3. General config:    M-x customize-mode
  4. Hide these tips:   C-h v haskell-process-show-debug-tips
Changed directory: /home/vagrant/yesod-splittest/
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
λ> 

Thanks
Arnaud

 
On 19 Apr 2014, at 13:05, Andras Slemmer <[hidden email]> wrote:

If you're using several source directories then simply specify them in your .cabal with hs-source-dirs. So for example if you have a library in src/lib and a test-suite in src/test and your tests use your lib then you'd have something like this in your .cabal

library
  exposed-modules: Lib
  hs-source-dirs: src/lib

test-suite sometest
  type:           exitcode-stdio-1.0
  main-is:        Test.hs
  hs-source-dirs: src/test src/lib



On 18 April 2014 16:20, Arnaud Bailly <[hidden email]> wrote:
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

signature.asc (507 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Correctly setting up emacs + ghc-mod

Arnaud Bailly-2
In reply to this post by Zsolt Dollenstein-3
I tried it but to no avail. Still got the same error. I removed ghc-init from my config, just in case, and still have the problem

Will post on haskell-mode ML…

Arnaud
On 20 Apr 2014, at 16:28, Zsolt Dollenstein <[hidden email]> wrote:

Have you tried M-x haskell-process-unignore?


On Sun, Apr 20, 2014 at 10:20 AM, Arnaud Bailly <[hidden email]> wrote:
This is what I have in my cabal file:

library
    hs-source-dirs: ., fay-shared
    exposed-modules: Application
                     Foundation

 

but I keep getting same error when loading a file that depends on the fay-shared directory (please not that command-line building with cabal runs fine so this is definitely an issue with my emacs settings).

Here is the output I got in haskell interpreter when loading a file that depends on fay-shared/SharedTypes.hs:

GHCi is ignoring: /home/vagrant/yesod-splittest/.ghci (run M-x haskell-process-unignore)                                                                                                                    
The next big Haskell project is about to start!
If I break, you can:
  1. Restart:           M-x haskell-process-restart
  2. Configure logging: C-h v haskell-process-log (useful for debugging)
  3. General config:    M-x customize-mode
  4. Hide these tips:   C-h v haskell-process-show-debug-tips
Changed directory: /home/vagrant/yesod-splittest/
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
λ> 

Thanks
Arnaud

 
On 19 Apr 2014, at 13:05, Andras Slemmer <[hidden email]> wrote:

If you're using several source directories then simply specify them in your .cabal with hs-source-dirs. So for example if you have a library in src/lib and a test-suite in src/test and your tests use your lib then you'd have something like this in your .cabal

library
  exposed-modules: Lib
  hs-source-dirs: src/lib

test-suite sometest
  type:           exitcode-stdio-1.0
  main-is:        Test.hs
  hs-source-dirs: src/test src/lib



On 18 April 2014 16:20, Arnaud Bailly <[hidden email]> wrote:
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

signature.asc (507 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Correctly setting up emacs + ghc-mod

Andras Slemmer
Are you trying to use inferior haskell mode? That operates separately from ghc-mod/cabal. In particular i think the setting you're looking for is the command to execute in the inferior process:
M-x customize
search for "Haskell Program Name" and change "ghci" to sth like "ghci -iwhere/my/src/are"


On 21 April 2014 09:30, Arnaud Bailly <[hidden email]> wrote:
I tried it but to no avail. Still got the same error. I removed ghc-init from my config, just in case, and still have the problem

Will post on haskell-mode ML…

Arnaud
On 20 Apr 2014, at 16:28, Zsolt Dollenstein <[hidden email]> wrote:

Have you tried M-x haskell-process-unignore?


On Sun, Apr 20, 2014 at 10:20 AM, Arnaud Bailly <[hidden email]> wrote:
This is what I have in my cabal file:

library
    hs-source-dirs: ., fay-shared
    exposed-modules: Application
                     Foundation

 

but I keep getting same error when loading a file that depends on the fay-shared directory (please not that command-line building with cabal runs fine so this is definitely an issue with my emacs settings).

Here is the output I got in haskell interpreter when loading a file that depends on fay-shared/SharedTypes.hs:

GHCi is ignoring: /home/vagrant/yesod-splittest/.ghci (run M-x haskell-process-unignore)                                                                                                                    
The next big Haskell project is about to start!
If I break, you can:
  1. Restart:           M-x haskell-process-restart
  2. Configure logging: C-h v haskell-process-log (useful for debugging)
  3. General config:    M-x customize-mode
  4. Hide these tips:   C-h v haskell-process-show-debug-tips
Changed directory: /home/vagrant/yesod-splittest/
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
λ> 

Thanks
Arnaud

 
On 19 Apr 2014, at 13:05, Andras Slemmer <[hidden email]> wrote:

If you're using several source directories then simply specify them in your .cabal with hs-source-dirs. So for example if you have a library in src/lib and a test-suite in src/test and your tests use your lib then you'd have something like this in your .cabal

library
  exposed-modules: Lib
  hs-source-dirs: src/lib

test-suite sometest
  type:           exitcode-stdio-1.0
  main-is:        Test.hs
  hs-source-dirs: src/test src/lib



On 18 April 2014 16:20, Arnaud Bailly <[hidden email]> wrote:
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe





_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: Correctly setting up emacs + ghc-mod

Arnaud Bailly-2
Yes, I am running haskell interpreter from inferior-haskell-mode.

I though haskell mode had the logic to extract the source info from cabal file.


On 21 Apr 2014, at 16:35, Andras Slemmer <[hidden email]> wrote:

Are you trying to use inferior haskell mode? That operates separately from ghc-mod/cabal. In particular i think the setting you're looking for is the command to execute in the inferior process:
M-x customize
search for "Haskell Program Name" and change "ghci" to sth like "ghci -iwhere/my/src/are"


On 21 April 2014 09:30, Arnaud Bailly <[hidden email]> wrote:
I tried it but to no avail. Still got the same error. I removed ghc-init from my config, just in case, and still have the problem

Will post on haskell-mode ML…

Arnaud
On 20 Apr 2014, at 16:28, Zsolt Dollenstein <[hidden email]> wrote:

Have you tried M-x haskell-process-unignore?


On Sun, Apr 20, 2014 at 10:20 AM, Arnaud Bailly <[hidden email]> wrote:
This is what I have in my cabal file:

library
    hs-source-dirs: ., fay-shared
    exposed-modules: Application
                     Foundation
 
but I keep getting same error when loading a file that depends on the fay-shared directory (please not that command-line building with cabal runs fine so this is definitely an issue with my emacs settings).

Here is the output I got in haskell interpreter when loading a file that depends on fay-shared/SharedTypes.hs:

GHCi is ignoring: /home/vagrant/yesod-splittest/.ghci (run M-x haskell-process-unignore)                                                                                                                    
The next big Haskell project is about to start!
If I break, you can:
  1. Restart:           M-x haskell-process-restart
  2. Configure logging: C-h v haskell-process-log (useful for debugging)
  3. General config:    M-x customize-mode
  4. Hide these tips:   C-h v haskell-process-show-debug-tips
Changed directory: /home/vagrant/yesod-splittest/
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
Import.hs:18:18-28: Could not find module `SharedTypes' …                                                                                                                                                   
    Use -v to see a list of the files searched for.                                                                                                                                                         
Compilation failed.                                                                                                                                                                                         
λ> 

Thanks
Arnaud

 
On 19 Apr 2014, at 13:05, Andras Slemmer <[hidden email]> wrote:

If you're using several source directories then simply specify them in your .cabal with hs-source-dirs. So for example if you have a library in src/lib and a test-suite in src/test and your tests use your lib then you'd have something like this in your .cabal

library
  exposed-modules: Lib
  hs-source-dirs: src/lib

test-suite sometest
  type:           exitcode-stdio-1.0
  main-is:        Test.hs
  hs-source-dirs: src/test src/lib



On 18 April 2014 16:20, Arnaud Bailly <[hidden email]> wrote:
Hello,

I am struggling to get my emacs settings right for doing significant Haskell development, eg. something more involved than a bunch of source files in a single directory. The issue I am running in currently is that when trying to load files in the interpreter, most source paths are missing which means loading inevitably fails. This is especially annoying with tests: To get things working correctly I need to explicitly add in the console

> :set -iwhere/my/src/are

Is there any configuration I should be aware of in my cabal files or .emacs file that would correctly set the source roots? Am I missing something?

Here is my .emacs configuration. Thanks for any help.

;; haskell coding                                                                                                                                                                                           
(require 'auto-complete)
(require 'haskell-mode)
(require 'haskell-cabal)

(autoload 'ghc-init "ghc" nil t)

(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

(eval-after-load "haskell-mode"
  '(progn
     (setq haskell-stylish-on-save t)
     (setq haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans"
               "--with-ghc=ghci-ng"))

     (define-key haskell-mode-map (kbd "C-,") 'haskell-move-nested-left)
     (define-key haskell-mode-map (kbd "C-.") 'haskell-move-nested-right)
     (define-key haskell-mode-map (kbd "C-c v c") 'haskell-cabal-visit-file)
     (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)
     (define-key haskell-mode-map (kbd "C-x C-d") nil)
     (setq haskell-font-lock-symbols t)

     ;; Do this to get a variable in scope                                                                                                                                                                  
     (auto-complete-mode)

     ;; from http://pastebin.com/tJyyEBAS                                                                                                                                                                   
     (ac-define-source ghc-mod
       '((depends ghc)
         (candidates . (ghc-select-completion-symbol))
         (symbol . "s")
         (cache)))

     (defun my-ac-haskell-mode ()
       (setq ac-sources '(ac-source-words-in-same-mode-buffers
                          ac-source-dictionary
                          ac-source-ghc-mod)))
     (add-hook 'haskell-mode-hook 'my-ac-haskell-mode)


     (defun my-haskell-ac-init ()
       (when (member (file-name-extension buffer-file-name) '("hs" "lhs"))
         (auto-complete-mode t)
         (setq ac-sources '(ac-source-words-in-same-mode-buffers
                            ac-source-dictionary
                            ac-source-ghc-mod))))
     (add-hook 'find-file-hook 'my-haskell-ac-init)))

(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load "which-func"
  '(add-to-list 'which-func-modes 'haskell-mode))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe






_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

signature.asc (507 bytes) Download Attachment