haskell 的 org-babel 不适用于 eval haskell 块

org-babel for haskell not works of eval haskell block

我正在使用 org-mode 博客,我使用 org-babel 评估代码如下:

#+BEGIN_SRC haskell
import Data.Function (fix)

f :: Int -> Int
f = (+ 1)

main :: IO ()
main = do
      putStrLn $ show $ f 1
#+END_SRC

#+RESULTS:
: <interactive>:9:25: Not in scope: ‘f’

我发现 haskell 的 org-babel 使用 infer-haskell 模式启动会话并评估代码。我还说创建了会话,如果我不定义函数而是直接 putStrLn "hello" ,它就可以工作。

希望任何人都可以修复这个错误:)

#+BEGIN_SRC haskell
import Data.Function (fix)

f :: Int -> Int
let f = (+ 1)

main :: IO ()
main = do
      putStrLn $ show $ f 1
#+END_SRC

#+RESULTS:
: 2

Org 的 babel 模式是 运行 带有 ghci 的 Haskell 代码。在ghci中你需要使用let来声明函数。

在此 article 中,Yoshinari Nomura 描述了一种通过 Ruby 脚本使用 runhaskell 评估 Haskell 块的方法。我不懂日文,所以我无法翻译细节,但是这个方法让我可以 运行 haskell 块而不必专门为解释器编写。