首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs haskell intero模式,导入无法找到模块

Emacs haskell intero模式,导入无法找到模块
EN

Stack Overflow用户
提问于 2018-05-26 19:15:08
回答 2查看 1.2K关注 0票数 0

编辑:只有在使用emacs模式和intero模式(C-c C-l加载到ghci)时才会发生此错误。它使用stack ghc Log.hs LogAnalysis.hs在命令行中工作。

我正在通过CIS 194 (2013年春季)学习Haskell,并且在执行家庭作业2时遇到了这个问题。家庭作业文件夹非常简单:

代码语言:javascript
复制
homework2
|-- LogAnalysis.hs
|-- Log.hs
|-- error.log
|-- sample.log

有些数据类型是在Log.hs中定义的,需要导入到LogAnalysis.hs中,这是我需要处理的文件。LogAnalysis.hs中的前几行如下:

代码语言:javascript
复制
{-# OPTIONS_GHC -Wall #-}
module LogAnalysis where

import Log

-- Exercise 1: parse an individual message
...

但是,在我的emacs中,使用haskell模式和intero获得了这样的错误消息:

代码语言:javascript
复制
error:
    Could not find module 'Log'
    Use -v to see a list of the files searched for.

(Hit 'C-c C-r' in the Haskell buffer to apply suggestions.)

在emacs中使用“C”加载到ghci时,也会出现相同的消息。

但是使用LogAnalysis.hs在命令行中加载stack ghci时不会出现此错误,相反,消息如下:

代码语言:javascript
复制
Prelude> :l LogAnalysis.hs
[1 of 2] Compiling Log              ( Log.hs, interpreted )
[2 of 2] Compiling LogAnalysis      ( LogAnalysis.hs, interpreted )
Ok, two modules loaded.
*LogAnalysis>

因此,我猜想这个错误与我的emacs设置haskell模式和intero模式有关,但还没有找到任何可用的解决方案。

谢谢你阅读这个问题,你的帮助将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-27 11:50:30

似乎intero需要一个package.yaml和一个stack.yaml来定位源文件。您只需运行stack initstack new就可以自动生成这些项目文件。

我遇到这个问题好几次了。以上方法解决了我在Windows和Fedora上的问题,因此我希望这将对您有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2018-05-27 20:38:45

借助“将军”的回答和一些更多的阅读,通过使用堆栈创建一个新项目来解决这个问题,这样intero就知道了我的源文件的位置。因此,这个问题是由intero不知道在intero-global-mode中在emacs中查找本地模块造成的。在这里,我将在这里写我自己的答案,以便进一步扩展“将军”的答案,并记录作为哈斯克尔初学者解决这个问题的过程:

为了使intero能够导入本地模块,我们应该避免使用intero-global-mode,而是创建一个本地项目(事后看来,这对我来说更有意义)。

因此,在这个家庭作业2的例子中,我将不像问题中描述的那样将文件移动到一个作业文件夹中,而是将源代码文件移动到stack new homework2中。然后,当使用emacs加载LogAnalysis.hs时,而不是以前在LogAnalysis.hs中得到的消息。

代码语言:javascript
复制
Loaded GHCi configuration from /Users/[username]/.stack/global-project/.stack-work/intero/intero-[script]

加载LogAnalysis.hs时的错误消息,我现在可以获得:

代码语言:javascript
复制
Loaded GHCi configuration from /path/to/homework2/.stack-work/intero/intero-[script]

*intero:homework2:homework2:repl*.中使用C-c C-l加载LogAnalysis.hs现在获得:

代码语言:javascript
复制
[2 of 2] Compiling LogAnalysis      ( /path/to/homework2/src/LogAnalysis.hs, interpreted ) [flags changed]
Ok, two modules loaded.

所以问题解决了。

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

https://stackoverflow.com/questions/50546248

复制
相关文章

相似问题

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