首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Stack为Haskell建立org-babel

如何用Stack为Haskell建立org-babel
EN

Stack Overflow用户
提问于 2017-02-07 03:49:55
回答 4查看 4K关注 0票数 19

我在跑:

  • GNU Emacs 24.4.1
  • 堆栈版本1.3.3
  • org-模式
  • 哈斯克尔模式

我看过了:

虽然上面的要点看起来很有希望,但我没有发现任何看起来是组织运行的权威方法-haskell运行(例如,没有任何关于melpa的东西),当然也没有任何专门针对任何复杂的运行堆栈环境,而不是使用我的全球ghc会带来的。

当我试图:

代码语言:javascript
复制
#+BEGIN_SRC haskell
let x = "test"
putStrLn x
#+END_SRC

我得到了

执行Haskell代码块

...which永远挂着。当我-g,我看到:

代码语言:javascript
复制
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错误,并且永远不会将控制返回到我的org会话。

这有可能是因为我有一个定制的提示吗?使用lambda而不是Prelude>?

EN

回答 4

Stack Overflow用户

发布于 2017-02-17 16:15:55

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

  • 你需要一个haskell解释器;-)我在Fedora 24上,所以我安装了ghc-编译器包,我得到了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:第一次失败,消息缓冲区显示“缓冲区haskell.org不存在或没有进程”。
  • 但是如果您再次在代码块上执行code,它就成功了!

显然,ob-haskell.el需要一些工作--在我们到达Stack之前,我对Stack的了解甚至比我对Haskell所知道的还要少,所以我将把它留给感兴趣的读者。

编辑: 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

票数 6
EN

Stack Overflow用户

发布于 2018-01-11 18:33:59

这可能是因为自定义提示:我有同样的问题,当我从~/.ghci中删除":set +t“和":set +t”和:set提示"GHCI >“时,它起了作用。我对它做了一些修改,似乎只要您的自定义提示符中除了末尾没有任何空格(我将我的提示改为”GHCI>“并运行),它就能工作。它解析的正则表达式似乎假定提示符中没有空格。

票数 2
EN

Stack Overflow用户

发布于 2021-05-31 03:28:10

在我的例子中,它是.ghci,就像Testare的一样。当我评论掉:set prompt "λ "时,emacs就停止了冻结,而是给出了‘org-babel-script-escape’ expects a string的信息。要想让:set +t发挥作用,就必须对:set +t进行评论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42081379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档