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

标签 haskell emacs org-mode literate-programming org-babel

我在跑:

  • GNU Emacs 24.4.1
  • 堆栈版本 1.3.3
  • 组织模式
  • haskell 模式

  • 我浏览过:
  • Emacs Org-Mode & Literate 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
    

    我明白了

    executing Haskell code-block



    ...永远挂起。当我 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 session 。

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

    最佳答案

    这不是一个完整的答案:特别是,它甚至没有提到 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 在代码块上:第一次失败并且消息缓冲区显示“缓冲区 haskell.org 不存在或没有进程”。
  • 但是如果你再次对代码块执行 C-c C-c ,它就会成功!

  • 显然,ob-haskell.el需要一些工作——那是在我们到达 Stack 之前,我对 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

    关于haskell - 如何使用 Stack 为 Haskell 设置 org-babel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42081379/

    相关文章:

    haskell - 在没有类型注释的情况下避免 let 绑定(bind)中的单态性

    haskell - Int 列表与 Int -> Int 列表相比,类型相同吗?

    emacs - 如何在组织模式导出中按编号引用部分?

    org-mode - Emacs 组织模式总计表

    Emacs 组织模式 : How to include properties in diary anniversaries?

    haskell - 这个 Haskell 代码的语法规则是什么?

    haskell - Jupyter 和 Haskell - 包

    emacs - 如何让我的包在 el-get 之后立即安装(使用 el-get)

    emacs 智能感知

    ruby - 使用语法高亮将代码编写为字符串