Как настроить org-babel для Haskell с помощью Stack
Я бегу:
- GNU Emacs 24.4.1
- Версия стека 1.3.3
- орг-режим
- Haskell-режим
Я просмотрел:
- Emacs Org-Mode и грамотный Haskell
- https://gist.github.com/reetinder/4022989
- https://wiki.haskell.org/Emacs/Literate_programming
- https://wiki.haskell.org/Literate_programming
- https://github.com/haskell/haskell-mode/issues/1429
Хотя приведенная выше суть выглядит многообещающе, я не нашел ничего, что могло бы показаться авторитетным способом запуска 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
чтобы он работал.