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

Mit*_*ops 15 emacs haskell literate-programming org-mode org-babel

我在跑:

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

我看了看:

虽然上面的要点看起来很有希望,但我还没有找到任何看起来像权威的方式来运行org-haskell(例如,没有关于melpa的东西),当然没有什么专门针对运行堆栈环境而不是使用我的任何复杂性全球ghc将需要.

当我尝试:

#+BEGIN_SRC haskell
let x = "test"
putStrLn x
#+END_SRC
Run Code Online (Sandbox Code Playgroud)

我明白了

执行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"
Run Code Online (Sandbox Code Playgroud)

当我选中haskell缓冲区时,我看到它已经真正评估了我发送的内容,它只是有这个org-babel-haskell-eoe错误并且永远不会将控制返回到我的org会话.

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

Nic*_*ckD 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

  • 代码块上的Cc Cc:第一次失败并且Messages缓冲区显示"Buffer haskell.org不存在或没有进程".

  • 但如果你再次在代码块上执行Cc Cc,它就会成功!

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

编辑:回复.版本信息(在评论中要求):我保持接近最前沿.在这个时间(2017年5月1日)这一点上,我跑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