haskell emacs read-eval-print-loop haskell-mode

haskell repl en emacs



read-eval-print-loop haskell-mode (1)

Hola, estoy comenzando con Haskell y tratando de configurar mis emacs para su desarrollo.

Tengo haskell-mod y ghc-mod últimos en emacs 24.3.1 . GHC es 7.6.3

He creado un archivo haskell first.hs y cuando lo hago Cc Cl Pregunta:

start a new project named haskell ? y or n

mi nombre de directorio es Haskell. Presiono y

Set the cabal directory

Lo he intentado con ~ / .cabal y mi directorio actual llamado haskell

Set the current directory

Solo presioné enter ya que tiene directorio haskell

Muestra mensajes de error:

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

¿Cómo puedo obtener el repl?

Leí que podría necesitar bajar la versión de ghc para que funcione. ¿Esa es una buena solución?

Solución :

Tenía varias custom-set-variables en init.el y eso me llevó al problema.


ACTUALIZACIÓN 2017

ahora que tenemos Intero, te sugiero que pruebes Intero / Stack, funciona bastante bien.

Con él mi configuración se adelgaza aún más:

;; ---------------------------------------------------------------------- ;; 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))

Con respecto al REPL , básicamente solo carga el archivo y luego Cc Cl en el repl (siempre puede cambiar entre las dos ventanas con Cc Cz y puede borrar el repl-buffer con Cc Ck (cuando está adentro).

El único inconveniente es que Intero generalmente se instala localmente en su proyecto, por lo que la primera puesta en marcha de un nuevo proyecto llevará un tiempo para que Intero descargue / compile / arranque, pero no es gran cosa y usted gana mucho.

ACTUALIZAR

Ahora que la stack está funcionando ghc-mod , recomendaría configurar el haskell-process-type ghc-mod en auto y tal vez instalar ghc-mod usando stack.

aquí está la configuración actual que estoy usando:

(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)

Como puedes ver, básicamente me deshice de todas las cosas relacionadas con ghc-mod (la pila funciona igual que con el haskell-mode actual) y reemplacé el back-end de la company (aunque esta es muy lenta y espero encontrar algo mejor)

variables

Tesis que normalmente establece dentro de Emacs / Configuración de 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)))

Estos son los paquetes que agregué:

  • haskell-mode
  • compañía (no relacionada con Haskell sino que es una dependencia)
  • compañía-cabal
  • compañía-ghci
  • ghci-completion
  • Shakespeare-mode (para Yesod)
  • company-quickhelp (para una buena visualización de :i )

primero

si solicita su directorio cabal - quiere saber dónde está su archivo myProject.cabal - si no tiene uno, simplemente tome la carpeta donde está su archivo (el predeterminado - creo que el predeterminado / find nunca me falló hasta ahora )

en caso de que necesite un poco de sample-.emacs-setup

Aquí hay partes de mi archivo .emacs que funciona para mí:

(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)))

Tenga en cuenta la parte con (quote cabal-repl) - esto debería funcionar con los sandboxes de cabal. Además, esto agregará más información de registro a un búfer llamado haskell-process-log, donde podrá encontrar más información sobre su problema.

Lo uso con ghc-mod version 5.1.0.2 compiled by GHC 7.8.3 y GHC 7.8.3 obviamente.

Por supuesto, debes asegurarte de que tu carpeta .cabal y el lugar donde ghc-mod en tu camino (creo que también puedes configurar esto en algún lugar de la configuración de emacs, pero es mucho más fácil de esta manera).

observaciones

  • tienes que instalar el paquete ghc en emacs no ghc-mod .
  • Tuve problemas con diferentes versiones de ghc-mod y el paquete emacs antes, así que asegúrese de obtener lo último con cabal-install y luego reinstalar el paquete de emacs (solo hubo problemas con el análisis del ghc-output de mi parte, )

más información

Si esto no lo ayuda, siéntase libre de

ejecución de muestra en mi máquina

Edité un archivo de muestra como este:

Luego presiono Cc Cl y presiono y:

Y acepte la carpeta (aquí es donde se encuentra el archivo) y cualquier otra pregunta con Ret: ahora debería ver el búfer *haskell* con un mensaje amigable / lambda:

Finalmente puedo verificar que el archivo se cargó: