Haskell repl в emacs

Привет я начинаю с haskell и пытаюсь настроить мой emacs для его разработки.

Я haskell-mod и ghc-mod последний в emacs 24.3.1. С GHC-это 7.6.3

сначала я создал файл haskell.УГ и когда я делаю C-c C-l Он спрашивает :

start a new project named haskell ? y or n

мое имя каталога-haskell. Я нажимаю y

Set the cabal directory

Я пробовал с обоих ~/.междусобойчик и мой текущий каталог с именем haskell

Set the current directory

просто нажмите enter, как это было Хаскелл каталог

это показывает сообщения об ошибках :

haskell-process-start: cl-ecase failed: cabal-rep, (ghci quote cabal-repl quote cabal-ghci quote cabal-dev quote)

как я могу получить repl ?

Я прочитал, что мне может понадобиться понизить версию ghc, чтобы она работала. Это хорошее решение ?

решение :

у меня было несколько custom-set-variables в init.и это привело к проблеме.

1 ответов


обновление 2017

теперь у нас есть Интеро я бы предложил вам попробовать Intero / Stack - он работает довольно хорошо.

С ним мой конфиг еще более уменьшен:

;; ----------------------------------------------------------------------
;; HASKELL
(require 'haskell-mode)
(require 'intero)
(add-hook 'haskell-mode-hook 'intero-mode)
(require 'flycheck)
(setq flycheck-check-syntax-automatically '(save new-line))
(flycheck-add-next-checker 'intero '(warning . haskell-hlint))

о REPL вы в основном просто загружаете файл, а затем C-c C-l в repl (вы всегда можете переключаться между двумя окнами с помощью C-c C-z и вы можете очистить REPL-буфер с помощью C-c C-k (когда внутри.)

единственным недостатком является то, что Intero обычно устанавливается локально в вашем проекте, поэтому первый запуск в новый проект займет некоторое время для загрузки/компиляции/загрузки-но это не имеет большого значения, и вы получаете много.


обновление

теперь stack и большой, я рекомендую установка haskell-process-type to auto и, возможно, установка ghc-mod используя стек.

вот текущая настройка, которую я использование:

(require 'haskell-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'linum-mode)
(add-to-list 'exec-path "~/.local/bin")
(eval-after-load 'haskell-mode '(progn
  (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
  (define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
  (define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
  (define-key haskell-mode-map "\C-ch" 'haskell-hoogle)))
(eval-after-load 'haskell-cabal '(progn
  (define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
  (define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
  (define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))

(require 'company-ghci)
(push 'company-ghci company-backends)
(add-hook 'haskell-mode-hook 'company-mode)
(add-hook 'haskell-interactive-mode-hook 'company-mode)

как вы можете видеть, я в основном избавился от всех ghc-mod связанные вещи (стек работает как с текущей haskell-mode) и заменить company бэкэнд (хотя это очень медленно и я надеюсь найти что-то лучше)

переменные

тезисы, которые вы обычно устанавливаете в Emacs / конфигурации Haskell-Mode

(custom-set-variables
 ;; there is of course more in here - these are the Haskell related:
 '(haskell-font-lock-symbols (quote unicode))
 '(haskell-hoogle-command nil)
 '(haskell-mode-hook
   (quote
    (linum-mode turn-on-haskell-indentation turn-on-haskell-doc-mode)) t)
 '(haskell-process-auto-import-loaded-modules t)
 '(haskell-process-load-or-reload-prompt t)
 '(haskell-process-log t)
 '(haskell-process-suggest-language-pragmas nil)
 '(haskell-process-suggest-no-warn-orphans t)
 '(haskell-process-type (quote auto))
 '(haskell-process-use-presentation-mode t)
 '(haskell-tags-on-save t)
 '(inferior-haskell-wait-and-jump t)
 '(safe-local-variable-values
   (quote
    ((haskell-process-use-ghci . t)
     (haskell-indent-spaces . 4))))
 (uniquify)))

это пакеты I добавлено:

  • Хаскел-режим
  • компания (не связанная с Haskell, как есть, но зависимость)
  • компания-cabal
  • компания-ghci
  • ghci-завершение
  • Шекспир-режим (для Yesod)
  • компания-quickhelp (для приятного отображения :i)

первый

если он просит каталог междусобойчик - она хочет знать, где ваш это - если у вас его нет, просто возьмите папку, в которой находится ваш файл (по умолчанию - я думаю, что по умолчанию/find никогда не подводил меня до сих пор).

в случае, если вам нужен образец-.emacs-setup

Вот части из моего .emacs файл, который работает для меня:

(autoload 'ghc-init "ghc" nil t)
(autoload 'ghc-debug "ghc" nil t)
(add-hook 'haskell-mode-hook (lambda () (ghc-init)))
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load 'haskell-mode '(progn
  (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
  (define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
  (define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
  (define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
  (define-key haskell-mode-map (kbd "C-c C-n C-c") 'haskell-process-cabal-build)
  (define-key haskell-mode-map (kbd "C-c C-n c") 'haskell-process-cabal)))
(eval-after-load 'haskell-cabal '(progn
  (define-key haskell-cabal-mode-map (kbd "C-`") 'haskell-interactive-bring)
  (define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
  (define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
  (define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))

(custom-set-variables
 '(haskell-interactive-mode-hide-multi-line-errors nil)
 '(haskell-process-log t)
 '(haskell-process-type (quote cabal-repl)))

обратите внимание на часть с (quote cabal-repl) - это должно работать с песочницами cabal. Также это добавит дополнительную информацию о регистрации в буфер с именем haskell-process-log где вы можете найти больше о ваших проблемах.

мне ghc-mod version 5.1.0.2 compiled by GHC 7.8.3 и GHC 7.8.3 очевидно.

конечно, вы должны убедиться, что ваш .cabal папка и место, где ghc-mod находится на вашем пути (я думаю, вы можете настроить это где - то в настройках emacs, но это намного проще).

Примечания

  • вы должны установить пакет ghc в emacs нет ghc-mod.
  • у меня были проблемы с разными версиями ghc-mod и пакет emacs раньше-поэтому убедитесь, что вы получаете последнюю версию с cabal-install, а затем переустановите пакет emacs (были только проблемы с разбором ghc-вывода с моей стороны)

дополнительная информация

если это не поможет, пожалуйста, не стесняйтесь

образец работает на моей машине

я отредактировал пример файла следующим образом:

Helo Emacs

затем я нажимаю C-c C-l и нажимаю y:

Step 2

и примите папку (здесь находится файл) и любые другие вопросы с Ret - теперь вы должны увидеть *haskell* буфер с дружественным сообщением / лямбда:

Step 3

наконец-то я могу проверить, что файл загрузился:

enter image description here