Как настроить org-babel для Haskell с помощью Stack

Я бегу:

  • GNU Emacs 24.4.1
  • Версия стека 1.3.3
  • орг-режим
  • Haskell-режим

Я просмотрел:

Хотя приведенная выше суть выглядит многообещающе, я не нашел ничего, что могло бы показаться авторитетным способом запуска org-haskell (например, ничего на melpa), и, конечно, ничего, нацеленного конкретно на любую сложность, работающую в среде стека, а не на использование моего Глобальный GHC повлечет за собой.

Когда я пытаюсь:

#+BEGIN_SRC haskell
let x = "test"
putStrLn x
#+END_SRC

я получил

выполнение кодового блока Haskell

... который висит навсегда. Когда я Cg, я вижу:

GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Some flags have not been recognized: prompt2, ghci     | 
ghci    λ> let x = "TESTING!"
putStrLn x
"org-babel-haskell-eoe"
Prelude| 
<interactive>:4:1: parse error on input `putStrLn'
ghci    λ> "org-babel-haskell-eoe"

Когда я переключаюсь в буфер haskell, я вижу, что он действительно оценил то, что я отправил, он просто имеет эту ошибку org-babel-haskell-eoe и никогда не возвращает управление моей сессии org.

Есть ли шанс, что это потому, что у меня есть пользовательское приглашение? Использование лямбды вместо Prelude>?

4 ответа

Это не полный ответ: в частности, в нем даже не упоминается стек. Но я (полный невежда на Хаскелле) хотел выяснить, что потребуется, чтобы заставить тестовую программу ОП работать в babel. Вот что я нашел:

  • Вам нужен интерпретатор haskell;-) Я на Fedora 24, поэтому я установил пакет ghc-compiler и получил ghci.

  • Тебе нужно haskell-mode, Я установил это из MELPA, используя менеджер пакетов emacs. Это также установлено inf-haskell.el

  • По умолчанию, inf-haskell хочет бежать hugsтак что я настроил haskell-program-name и установите его в "ghci".

  • M-x load-library RET ob-haskell RET

  • Cc Cc в блоке кода: при первом сбое и буфере сообщений отображается "Буфер haskell.org не существует или не имеет процесса".

  • Но если вы снова сделаете это Cc Cc в блоке кода, это будет успешно!

Очевидно, что ob-haskell.el нужна некоторая работа - и это еще до того, как мы доберемся до стека, о котором я знаю даже меньше, чем о Хаскеле, поэтому я оставлю это в качестве упражнения для заинтересованного читателя:-)

РЕДАКТИРОВАТЬ: Re. Информация о версии (запрошено в комментарии): Я держусь близко к краю кровотечения. На данный момент (2017-05-01) я бегу Org mode version 9.0.5 (release_9.0.5-444-g998576 @ /home/nick/elisp/org-mode/lisp/) а также GNU Emacs 26.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.20.10) of 2017-04-14

Что я сделал после установки stack а также ghci (с самим стеком)), должен был установить intero в Emacs, а затем добавить их в init.el:

 (setq haskell-process-type 'stack-ghci)
 ((org-babel-do-load-languages
     'org-babel-load-languages
        '((haskell . t)))

после этого я могу Cc Cc в блоке кода haskell, и я получаю результат под блоком кода.

Вероятно, это из-за настраиваемого приглашения: у меня возникла та же проблема, и когда я удалил ": set +t" и ":set prompt "GHCI >"из ~/.ghci, это сработало. Я немного возился с этим, и кажется, что это будет работать до тех пор, пока в вашем настраиваемом приглашении не будет пробелов, кроме конца (я поменяю мое на "GHCI>", и оно работает). Похоже, что регулярное выражение, которое анализирует информацию, предполагает в приглашении не будет пробелов.

В моем случае это было .ghci, как у Testare. Как только я закомментировал :set prompt "λ ", emacs перестал зависать, но выдал сообщение ‘org-babel-script-escape’ expects a string. Пришлось закомментировать :set +t чтобы он работал.

Другие вопросы по тегам