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-вывода с моей стороны)
дополнительная информация
если это не поможет, пожалуйста, не стесняйтесь
- добавить комментарий
- посмотреть счастливая страница программирования haskell
- посмотреть с GHC wiki на emacs
образец работает на моей машине
я отредактировал пример файла следующим образом:
затем я нажимаю C-c C-l и нажимаю y:
и примите папку (здесь находится файл) и любые другие вопросы с Ret - теперь вы должны увидеть *haskell*
буфер с дружественным сообщением / лямбда:
наконец-то я могу проверить, что файл загрузился: