编辑:只有在使用emacs模式和intero模式(C-c C-l加载到ghci)时才会发生此错误。它使用stack ghc Log.hs LogAnalysis.hs在命令行中工作。
我正在通过CIS 194 (2013年春季)学习Haskell,并且在执行家庭作业2时遇到了这个问题。家庭作业文件夹非常简单:
homework2
|-- LogAnalysis.hs
|-- Log.hs
|-- error.log
|-- sample.log有些数据类型是在Log.hs中定义的,需要导入到LogAnalysis.hs中,这是我需要处理的文件。LogAnalysis.hs中的前几行如下:
{-# OPTIONS_GHC -Wall #-}
module LogAnalysis where
import Log
-- Exercise 1: parse an individual message
...但是,在我的emacs中,使用haskell模式和intero获得了这样的错误消息:
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时不会出现此错误,相反,消息如下:
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模式有关,但还没有找到任何可用的解决方案。
谢谢你阅读这个问题,你的帮助将不胜感激!
发布于 2018-05-27 11:50:30
似乎intero需要一个package.yaml和一个stack.yaml来定位源文件。您只需运行stack init或stack new就可以自动生成这些项目文件。
我遇到这个问题好几次了。以上方法解决了我在Windows和Fedora上的问题,因此我希望这将对您有所帮助。
发布于 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中得到的消息。
Loaded GHCi configuration from /Users/[username]/.stack/global-project/.stack-work/intero/intero-[script]加载LogAnalysis.hs时的错误消息,我现在可以获得:
Loaded GHCi configuration from /path/to/homework2/.stack-work/intero/intero-[script]在*intero:homework2:homework2:repl*.中使用C-c C-l加载LogAnalysis.hs现在获得:
[2 of 2] Compiling LogAnalysis ( /path/to/homework2/src/LogAnalysis.hs, interpreted ) [flags changed]
Ok, two modules loaded.所以问题解决了。
https://stackoverflow.com/questions/50546248
复制相似问题