如何使用Stack为Haskell设置org-babel

问题描述 投票:14回答:3

我在跑:

  • GNU Emacs 24.4.1
  • 堆栈版本1.3.3
  • 组织模式
  • 哈斯克尔模式

我看了看:

虽然上面的要点看起来很有希望,但我还没有找到任何看起来像权威的方式来运行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错误并且永远不会将控制返回到我的org会话。

这有可能是因为我有自定义提示吗?使用lambda而不是Prelude>?

haskell emacs org-mode literate-programming org-babel
3个回答
5
投票

这不是一个完整的答案:特别是,它甚至没有提到Stack。但是我(对Haskell的完全无知)想知道如何让OP的测试程序在babel中运行。这是我发现的:

  • 你需要一个haskell解释器;-)我在Fedora 24上,所以我安装了ghc-compiler软件包,我得到了ghci。
  • 你需要haskell-mode。我使用emacs包管理器从MELPA安装了它。那也安装了inf-haskell.el
  • 默认情况下,inf-haskell想要运行hugs,所以我定制了haskell-program-name并将其设置为“ghci”。
  • M-x load-library RET ob-haskell RET
  • 代码块上的C-c C-c:第一次失败,消息缓冲区显示“Buffer haskell.org不存在或没有进程”。
  • 但如果你再次在代码块上执行C-c C-c,它就会成功!

显然,ob-haskell.el需要一些工作 - 那就是在我们进入Stack之前,我知道的比我知道的Haskell还要少,所以我会把它留作感兴趣的读者的练习:-)

编辑:回复。版本信息(在评论中要求):我保持接近最前沿。在这个时间点(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


2
投票

安装stackghci(有堆栈本身)后我做了什么,是在emacs中安装intero然后将它们添加到init.el

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

之后,我可以在haskell代码块中使用C-c C-c,并在代码块下得到结果。


0
投票

这可能是因为自定义提示:我有同样的问题,当我删除“:set + t”和“:set prompt”GHCI>“来自〜/ .ghci时,它起作用了。我摆弄了一些,并且它似乎会工作,只要你的自定义提示没有任何空格,除了结束(我改为我的“GHCI>”,它的工作原理)。似乎是它解析信息的正则表达式假设提示中没有空格。

© www.soinside.com 2019 - 2024. All rights reserved.