gpt4 book ai didi

haskell - 通过 Emacs 评估 ghci 中的缓冲区或拥抱

转载 作者:行者123 更新时间:2023-12-04 03:30:18 26 4
gpt4 key购买 nike

在 Emacs 中使用 sml 模式,我已经能够使用 C-c C-b 将我的缓冲区内容直接发送到劣质 SML 进程。 .现在我只想用 Haskell 做同样的事情。 Haskell-mode 似乎不支持这一点,所以我想知道:用 Emacs 和 Haskell 解决这个问题的正确方法是什么?

在学习 SML 时,我一直在使用 C-c C-b几乎不间断地在我进行时轻松评估我的程序,立即看到分配值等的结果。但是如果我使用 C-c C-l在包含两行的已保存文件上的 haskell 模式下,let foo = "foo"let bar = "bar" - 我得到 "parse error (possibly incorrect indentation)"

最佳答案

我认为您犯了一个常见的新手错误,混淆了您可以在 ghci 的 repl 中编写的内容以及您在 haskell 源文件中编写的内容。

所有 sml 解释器都以这样一种方式制作,即您可以将任何顶级声明写入 repl,或者换句话说:您可以在 sml 文件中写入的任何内容,您都可以写入 sml 解释器。因此你可以写val foo = "bar"进入文件并使用C-c C-b加载文件,您可以输入 val foo = "bar"进入口译员。

另一方面,由于 haskell 的工作方式,你可以写成 let foo = 42进入 ghci,但它不是有效的顶级声明,因此它不能在 haskell 源文件中(由它自己)。另一方面,您可以拥有 id n = n在 haskell 源文件中并使用 C-c C-l加载文件,但是你不能将它直接写入 ghci(你会得到一个错误::1:6: parse error on input '=')。这样做的原因是 ghci 中的 repl 在 IO monad 中运行,因此您在 ghci 中写入的任何内容都必须使用 do 表示法。我只能推荐你阅读Interactive evaluation at the prompt来自使用 GHCi 用户指南。
C-c C-b在 sml 模式下与 C-c C-l 完全相同在 haskell 模式下,至少在概念上是这样。我对haskell-mode的内部了解不多,但在sml-mode C-c C-b在解释器中执行一些 sml 代码,通常是 use(...)功能。在 haskell 模式下,它似乎只是执行 :load "..." ghci 命令

关于haskell - 通过 Emacs 评估 ghci 中的缓冲区或拥抱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com