Как настроить org-babel для Haskell со стеком

Я бегу:

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

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

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

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

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

я получил

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

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

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 и никогда не возвращает управление моему организационному сеансу.

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


person Mittenchops    schedule 07.02.2017    source источник
comment
Вам может быть полезен этот другой вопрос: stackoverflow.com/questions/42081379/   -  person brittAnderson    schedule 07.02.2017
comment
Вам нужно загрузить ob-haskell.el (или добавить haskell в org-babel-load-languages и перезапустить emacs), прежде чем вы сможете попытаться оценить блоки кода haskell. Это должно, по крайней мере, избавиться от функции No org-babel-execute для сообщения haskell.   -  person NickD    schedule 07.02.2017
comment
@brittUWaterloo, я полагаю, вы связались с этим моим вопросом.   -  person Mittenchops    schedule 08.02.2017
comment
@ Ник, ob-haskell.el откуда?   -  person Mittenchops    schedule 08.02.2017
comment
Это часть официального организационного режима: вы должны просто сказать (require 'ob-haskell) и он загрузится. Но я не уверен, поможет ли это с чем-то еще, кроме той начальной проблемы, которую вы могли (или не могли) уже решить.   -  person NickD    schedule 08.02.2017
comment
Спасибо, @Ник. Да, вы правы, я загрузил то самое висящее сообщение.   -  person Mittenchops    schedule 11.02.2017
comment
org-babel-haskell-eoe — это маркер, который ob-haskell использует для отделения результатов от остального вывода интерпретатора, чтобы он мог вырезать мякину и представлять результаты в буфере организационного режима.   -  person NickD    schedule 17.02.2017


Ответы (4)


Это не полный ответ: в частности, в нем даже не упоминается стек. Но я (полный невежда в Haskell) хотел узнать, что потребуется, чтобы тестовая программа OP запустилась в 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

  • C-c C-c в блоке кода: в первый раз происходит сбой, и буфер Messages показывает "Buffer haskell.org не существует или не имеет процесса".

  • Но если вы снова сделаете это C-c C-c в кодовом блоке, все получится!

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

РЕДАКТИРОВАТЬ: Ре. информация о версии (запрошено в комментарии): я держусь близко к переднему краю. На данный момент (01.05.2017) я запускаю 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

person NickD    schedule 17.02.2017

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

person Testare    schedule 11.01.2018

что я сделал после установки stack и ghci (с самим стеком)), так это установил intero в emacs, а затем добавил их в init.el:

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

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

person Azriel    schedule 18.03.2019

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

person Jshura    schedule 31.05.2021
comment
Я нахожусь на стадии просмотра org-bable-script escape expects a string, но из документов этой функции неясно, почему это происходит. - person Colin Woodbury; 26.06.2021