emacs 中的 haskell repl

2023-11-24

你好,我从 haskell 开始,并尝试设置我的 emacs 来进行它的开发。

I have haskell-mod and ghc-mod最新的emacs 24.3.1。 GHC 是7.6.3

我创建了一个 haskell 文件 first.hs ,当我这样做时C-c C-l它问:

start a new project named haskell ? y or n

我的目录名称是 haskell.我按y

Set the cabal directory

我尝试过 ~/.cabal 和我当前的目录名为haskell

Set the current directory

只需按 Enter 键,因为它有 haskell 目录

它显示错误消息:

haskell-process-start: cl-ecase failed: cabal-rep, (ghci quote cabal-repl quote cabal-ghci quote cabal-dev quote)

我怎样才能得到回复?

我读到我可能需要降级 ghc 版本才能使其工作。 这是好的解决方案吗?

Solution :

我有多个custom-set-variables在 init.el 中,它导致了问题。


2017 年更新

现在我们有了Intero我建议您尝试 Intero/Stack - 它工作得相当好。

有了它,我的配置更加精简:

;; ----------------------------------------------------------------------
;; HASKELL
(require 'haskell-mode)
(require 'intero)
(add-hook 'haskell-mode-hook 'intero-mode)
(require 'flycheck)
(setq flycheck-check-syntax-automatically '(save new-line))
(flycheck-add-next-checker 'intero '(warning . haskell-hlint))

关于REPL你基本上只是加载文件然后C-c C-l进入 repl (你可以随时在两个窗口之间切换C-c C-z你可以用以下命令清除 repl-bufferC-c C-k(在里面时)。

唯一的缺点是 Intero 通常安装在您的项目本地,因此首次启动新项目将需要一段时间 Intero 来下载/编译/启动 - 但这没什么大不了的,您会收获很多。


UPDATE

现在stack已经出来并且运行得很好我建议设置haskell-process-type to auto也许安装ghc-mod使用堆栈。

这是我当前使用的设置:

(require 'haskell-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'linum-mode)
(add-to-list 'exec-path "~/.local/bin")
(eval-after-load 'haskell-mode '(progn
  (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
  (define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
  (define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
  (define-key haskell-mode-map "\C-ch" 'haskell-hoogle)))
(eval-after-load 'haskell-cabal '(progn
  (define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
  (define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
  (define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))

(require 'company-ghci)
(push 'company-ghci company-backends)
(add-hook 'haskell-mode-hook 'company-mode)
(add-hook 'haskell-interactive-mode-hook 'company-mode)

正如你所看到的,我基本上摆脱了所有ghc-mod相关的东西(stack与当前一样工作haskell-mode)并替换为company后端(虽然这个真的很慢,我希望找到更好的东西)

变量

您通常在 Emacs/Haskell-Mode 的配置中设置这些内容

(custom-set-variables
 ;; there is of course more in here - these are the Haskell related:
 '(haskell-font-lock-symbols (quote unicode))
 '(haskell-hoogle-command nil)
 '(haskell-mode-hook
   (quote
    (linum-mode turn-on-haskell-indentation turn-on-haskell-doc-mode)) t)
 '(haskell-process-auto-import-loaded-modules t)
 '(haskell-process-load-or-reload-prompt t)
 '(haskell-process-log t)
 '(haskell-process-suggest-language-pragmas nil)
 '(haskell-process-suggest-no-warn-orphans t)
 '(haskell-process-type (quote auto))
 '(haskell-process-use-presentation-mode t)
 '(haskell-tags-on-save t)
 '(inferior-haskell-wait-and-jump t)
 '(safe-local-variable-values
   (quote
    ((haskell-process-use-ghci . t)
     (haskell-indent-spaces . 4))))
 (uniquify)))

这些是我添加的包:

  • Haskell 模式
  • 公司(与 Haskell 不相关,而是依赖项)
  • 公司阴谋集团
  • 公司-ghci
  • ghci 完成
  • 莎士比亚模式(适用于 Yesod)
  • 公司快速帮助(用于很好地显示:i)

First

如果它要求你阴谋集团目录- 它想知道你在哪里myProject.cabal文件是 - 如果你没有,只需获取文件所在的文件夹(默认值 - 我认为默认/查找到目前为止从未让我失望过)。

如果您需要一些sample-.emacs-setup

这是我的部分.emacs对我有用的文件:

(autoload 'ghc-init "ghc" nil t)
(autoload 'ghc-debug "ghc" nil t)
(add-hook 'haskell-mode-hook (lambda () (ghc-init)))
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

(eval-after-load 'haskell-mode '(progn
  (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
  (define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
  (define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
  (define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
  (define-key haskell-mode-map (kbd "C-c C-n C-c") 'haskell-process-cabal-build)
  (define-key haskell-mode-map (kbd "C-c C-n c") 'haskell-process-cabal)))
(eval-after-load 'haskell-cabal '(progn
  (define-key haskell-cabal-mode-map (kbd "C-`") 'haskell-interactive-bring)
  (define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
  (define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
  (define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))

(custom-set-variables
 '(haskell-interactive-mode-hide-multi-line-errors nil)
 '(haskell-process-log t)
 '(haskell-process-type (quote cabal-repl)))

请注意以下部分(quote cabal-repl)- 这应该适用于阴谋集团沙箱。 此外,这还将向名为的缓冲区添加更多日志记录信息Haskell 进程日志您可能会在其中找到有关您的问题的更多信息。

我用这个ghc-mod version 5.1.0.2 compiled by GHC 7.8.3显然是 GHC 7.8.3。

当然,您必须确保您的.cabal文件夹和位置ghc-mod在你的路径中(我认为你也可以在 emacs 设置中的某个地方配置它 - 但这样更容易)。

remarks

  • 你必须安装这个包ghc在 emacs 中不是ghc-mod.
  • 我之前在使用不同版本的 ghc-mod 和 emacs 软件包时遇到过问题 - 所以请确保您使用 cabal-install 获得最新版本,然后重新安装 emacs-package (不过,这只是我解析 ghc-output 的问题)

更多信息

如果这对您没有帮助,请随时

  • 添加评论
  • 看看快乐的 Haskell 编程页面
  • 看看emacs 上的 ghc 维基

在我的机器上运行示例

我编辑了一个示例文件,如下所示:

Helo Emacs

然后我按 C-c C-l 并按 y:

Step 2

并接受该文件夹(这是文件所在的位置)和任何其他问题与 Ret - 现在您应该看到*haskell*带有友好消息/lambda 的缓冲区:

Step 3

最后我可以检查文件是否已加载:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

emacs 中的 haskell repl 的相关文章

  • 在 Yesod 生态系统中,对某些文本进行 urlencode 的最佳方式是什么?

    我想对一些文本进行 url 编码 例如 用 20 替换每个空格等 我找到了 HTTP Network HTTP Base urlEncode 并且可以使用它 但我想知道是否还有其他通常在 Yesod 生态系统中使用的东西 不幸的是 由于 U
  • 如何在 scala repl 和 sbt 控制台中关闭/打开 typer 阶段

    是否可以在不退出当前会话的情况下切换阶段 我尝试进入 power 模式 但它仍然不打印类型 在SBT中只需添加以下设置 set scalacOptions in Compile console Xprint typer 在 REPL 中你可
  • 标准的能力

    我发现了一些使用标准的旧例子here http www serpentine com blog 2009 09 29 criterion a new benchmarking library for haskell 看起来好像早在 2009
  • Haskell 中的尾递归字符串分割

    我正在考虑分割字符串的问题s在一个字符处c 这表示为 break c s 其中 Haskell 库定义break c 足够接近 br br s h t if c h then s else let h t br t in h h t 假设我
  • Emacs C++,打开相应的头文件

    我是 emacs 新手 我想知道 是否有在头文件 源文件和相应的源文件 头文件之间切换的快捷方式 是否有像通用 emacs 参考卡那样的参考卡 Thanks There s ff find other file 您可以使用以下方法将其绑定到
  • 你能识别 Haskell 程序中的无限列表吗? [复制]

    这个问题在这里已经有答案了 可能的重复 如何判断列表是否是无限的 https stackoverflow com questions 7371730 how to tell if a list is infinite 在Haskell中 你
  • 找不到模块“Yesod”

    我有以下代码 LANGUAGE TypeFamilies QuasiQuotes MultiParamTypeClasses TemplateHaskell OverloadedStrings module Simple where imp
  • C# 开发人员有什么理由应该学习 Emacs/Vim 吗?

    我在一家纯粹的 Microsoft 商店担任 C 开发人员 最近 我开始在工作之余的空闲时间使用 Gas 和 Linux 自学汇编 我喜欢摆弄 Linux 尽管我对它还很陌生 我一直听说我应该学习 VIM 或 Emacs 但事实是 我绝对不
  • 在 monad 转换器类型类中使用列表 monad?

    我的目标是创建一个在 ReaderT WriterT 堆栈或 RWS 堆栈中使用列表 monad 的函数 更一般地说 如何在 mtl 类型类 例如 MonadReader MonadWriter 中使用列表 monad 我为什么要尝试这样做
  • emacs 是否有类似 vims 的 NERDtree 之类的东西

    对于 vim 有一个名为 NERDtree 的文件系统浏览器 https github com scrooloose nerdtree https github com scrooloose nerdtree Emacs 确实存在替代或更好
  • Emacs -- 修改 `fill-column-indicator.el` 以在空白处显示

    我正在寻求一些帮助来修改fill column indicator el由 Alp Aker 设计 以便垂直线在空白处可见 无论空白模式是否处于活动状态 以下是该库的 Github 存储库的链接 https github com alpak
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • ST monad 是如何工作的?

    我知道 ST monad 有点像 IO 的弟弟 而 IO 又是添加了状态 monadRealWorld魔法 我可以想象状态 也可以想象 RealWorld 以某种方式放入 IO 中 但每次我写一个类型签名ST the sST monad 的
  • 如何打乱列表?

    如何从一组数字 1 2 3 直到我击中x 我的计划是重新调整列表 1 2 3 并把它砍在x chopAt 3 2 3 1 2 3 chopAt 3 2 1 3 2 1 3 chopAt 3 3 1 2 3 chopAt chopAt x y
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 将子目录添加到加载路径

    我希望能够自动加载它们 而不是单独指定插件目录中的每个子目录 为此 我将以下内容包含到我的 emacs 文件中 let base emacs d plugins normal top level add subdirs to load pa
  • Emacs如何自动完成C上包含文件的单词?

    如何使 Emacs 完成 C 包含文件中的单词 include
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 如何运行 Kotlin REPL kotlinc-jvm 或 kotlinc

    我对 Kotlin 完全陌生 我正在尝试运行 Kotlin REPL 下列的this https kotlinlang org docs tutorials command line html running the repl 考虑到我使用

随机推荐

  • Entity Framework Oracle 和 Sql Server - 如何构建独立于数据库的应用程序

    我们正在尝试构建一个同时使用 Oracle 和 SQL Server 的数据访问层 不同时 我们使用 EF Model first 来创建模型并创建用于构建数据库的 SQL 脚本 我们的第一个想法是创建 2 个 EDMX 文件 每种类型一个
  • 为什么 Go HTTPS 客户端不重用连接?

    我有一个 http 客户端 它创建与主机的多个连接 我想设置它可以设置到特定主机的最大连接数 go的request Transport中没有这样的选项 我的代码看起来像 package main import fmt net http ne
  • 从 API 检索 Instagram 视频嵌入 URL

    我正在尝试以编程方式获取 Instagram 视频的嵌入链接 不幸的是 Instagram 的 oEmbed 端点似乎将视频视为照片 并且仅返回关键帧图像 而不提供嵌入链接 有谁知道一种方法可以检索 Instagram 视频的嵌入链接 而无
  • 如何在 PHP 中将 XML 转换为数组?

    我想将下面的 XML 转换为 PHP 数组 关于我如何做到这一点有什么建议吗
  • SQLCE 连接:保持打开还是关闭?

    考虑到移动设备上的性能 您认为 SQLCE 连接的最佳方法是什么 在应用程序运行期间保持其打开状态 或者在需要调用数据库时将其关闭 显然 这在一定程度上取决于您的应用程序的性质 但是我很想知道该小组已经实施了哪些内容以及原因 你绝对应该看史
  • Spring Boot 内存消耗增加超出 -Xmx 选项

    我注意到 Spring Boot 应用程序不遵守通过 Xmx 选项设置的内存量 例如 java Xss64m Xmx64m jar test jar 我还在控制台上打印了应用程序在启动时实际使用的内存量 并显示 最大内存 61M long
  • 如何更改全景项目标题的字体大小?

    设置全景项目标题的字体大小一次以便其可用于我的应用程序中的所有项目标题的最简单方法是什么 目前还没有一种方法可以自动为应用程序中的所有标头执行此操作 您需要为每一项设置样式 隐式样式将在 Mango 更新中出现 届时应该可以完成此操作 Up
  • 如何在 python 中处理机器学习中缺失的 NaN

    在应用机器学习算法之前如何处理数据集中的缺失值 我注意到删除缺失的 NAN 值并不是一件明智的事情 我通常使用 pandas 进行插值 计算平均值 并填充数据 这确实有效并提高了分类准确性 但可能不是最好的做法 这是一个非常重要的问题 处理
  • 如何配置 Visual Studio 将所有 TypeScript 文件合并到一个 JavaScript 文件中?

    使用 tsc 命令就像运行一样简单 tsc out all js js ts 当我构建项目时 如何配置 Visual Studio 来执行此操作 我发现了一个可能更简单的解决方案 只需修改您正在构建的项目 csproj vbproj 的构建
  • 为什么编译器不执行类型转换?

    考虑以下代码 include
  • Heroku + socket.io 广播上的多个测功机

    我似乎遇到一个问题 当我有超过 1 个 dyno 时 Heroku 上的 node js 应用程序中的 socket io 广播似乎不起作用 当我将其缩放到 1 时 它就完美地工作了 关于这件事有什么我需要知道的吗 也许有不同的方式向所有测
  • Android:支持所有设备的背景图像大小(以像素为单位)

    我正在创建一个将在所有 Android 设备上运行的应用程序 我想为我的应用程序创建 xhdpi 图形 我的应用程序是全屏的 我对创建图形感到困惑 谁能告诉我背景图像的最佳尺寸 以像素为单位 例如 xhdpi 720x1280 像素 高清
  • tf.initialize_all_variables() 和 tf.initialize_local_variables() 有什么区别?

    我正在查看此示例中的代码 完全连接的读者 py 我对第 147 行和第 148 行感到困惑 init op tf group tf initialize all variables tf initialize local variables
  • 如何进行 DOM 的中序遍历? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我发现了这个可笑的技术文档 http www w3 org TR DOM Level 2 Traversal Range traversal html Traversal Docum
  • 如何一致地逐行合并两个文件

    我有两个文件 文件1 txt 文件2 txt 这些文件只是示例 如何合并这两个文件 以创建文件 合并文件 txt如示例3 我现在正在写一个康壳公司 ksh 脚本 因此可以使用 KornShell 完成合并 AWK sed a Perl单线等
  • 单表继承还是类表继承?

    我正在阅读有关类表继承 CTI 的内容 发现我总体上更喜欢它 我的问题是 单表继承 STI 是否有任何特定的用例 您可以在 CTI 上使用它 I read http rhnh net 2010 07 02 3 reasons why you
  • 不必要地清空移出的 std::string

    libstdc 和 libc 都进行了移出std string对象为空 即使原始存储的字符串很短并且应用了短字符串优化 在我看来 这种排空使额外的和不必要的运行时开销 例如 这里是移动构造函数std basic string来自 libst
  • 如何在flutter中实现深度链接并重定向到应用商店?

    有没有一种方法可以在 flutter 中实现深度链接 这样 如果用户单击链接 那么他们会被重定向到应用程序的特定部分 假设应用程序已安装 但如果没有安装 他们会被重定向到相应的应用程序商店 安装应用程序 然后转到该特定部分 在寻找解决方案时
  • 什么情况下HTTP Referer会被截断

    我试图了解 HTTP 引用标头的行为 我注意到有时引用站点是完整的 完整的 URL 包括路径和查询字符串 但大多数情况下它仅包含域 例如 https www google com 代替 关于裁判何时满 何时截断有什么规则吗 截至 2020
  • emacs 中的 haskell repl

    你好 我从 haskell 开始 并尝试设置我的 emacs 来进行它的开发 I have haskell mod and ghc mod最新的emacs 24 3 1 GHC 是7 6 3 我创建了一个 haskell 文件 first