Emacs haskell intero 模式,导入找不到模块
Emacs haskell intero mode, import could not find module
编辑:此错误仅在使用 emacs haskell 模式和 intero 模式(C-c C-l
加载到 ghci)时发生。它在命令行中使用 stack ghc Log.hs LogAnalysis.hs
.
我正在通过 CIS 194(Spring 2013)学习 Haskell,并且在做 homework 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
...
但是,我在使用带有 intero 的 haskell 模式的 emacs 中收到这样的错误消息:
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-c C-l' 加载到 ghci 时出现相同的消息。
但是在命令行中使用 stack ghci
加载 LogAnalysis.hs
时不会出现此错误,而是消息:
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 模式有关,但还没有找到任何可用的解决方案。
感谢阅读此问题,我们将不胜感激!
intero
似乎需要 package.yaml
和 stack.yaml
才能找到您的源文件。您可以 运行 stack init
或 stack new
自动生成这些项目文件。
我多次遇到这个问题。以上方法解决了我在 Windows 和 Fedora 上的问题,希望对您有所帮助。
在 和更多阅读的帮助下,通过使用堆栈创建一个新项目解决了问题,因此 intero 知道我的源文件的位置。
因此,这个问题是由于在 emacs 中 intero-global-mode
时,intero 不知道在哪里寻找本地模块。
这里我把自己的答案写在这里,把Krantz的答案再扩展一点,记录一下作为初学者到Haskell:
解决这个问题的过程
为了让 intero 能够导入本地模块,我们应该避免使用 intero-global-mode
而是创建一个本地项目(事后看来这对我来说更有意义)。
所以对于这个家庭作业 2,我不会像问题中描述的那样将文件移动到家庭作业文件夹,而是 stack new homework2
,并将源文件移动到 homework2\src
。然后当使用 emacs 加载 LogAnalysis.hs
时,我得到的不是之前的消息 *intero:global-project::repl*
:
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.
所以问题解决了。
编辑:此错误仅在使用 emacs haskell 模式和 intero 模式(C-c C-l
加载到 ghci)时发生。它在命令行中使用 stack ghc Log.hs LogAnalysis.hs
.
我正在通过 CIS 194(Spring 2013)学习 Haskell,并且在做 homework 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
...
但是,我在使用带有 intero 的 haskell 模式的 emacs 中收到这样的错误消息:
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-c C-l' 加载到 ghci 时出现相同的消息。
但是在命令行中使用 stack ghci
加载 LogAnalysis.hs
时不会出现此错误,而是消息:
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 模式有关,但还没有找到任何可用的解决方案。
感谢阅读此问题,我们将不胜感激!
intero
似乎需要 package.yaml
和 stack.yaml
才能找到您的源文件。您可以 运行 stack init
或 stack new
自动生成这些项目文件。
我多次遇到这个问题。以上方法解决了我在 Windows 和 Fedora 上的问题,希望对您有所帮助。
在 intero-global-mode
时,intero 不知道在哪里寻找本地模块。
这里我把自己的答案写在这里,把Krantz的答案再扩展一点,记录一下作为初学者到Haskell:
为了让 intero 能够导入本地模块,我们应该避免使用 intero-global-mode
而是创建一个本地项目(事后看来这对我来说更有意义)。
所以对于这个家庭作业 2,我不会像问题中描述的那样将文件移动到家庭作业文件夹,而是 stack new homework2
,并将源文件移动到 homework2\src
。然后当使用 emacs 加载 LogAnalysis.hs
时,我得到的不是之前的消息 *intero:global-project::repl*
:
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.
所以问题解决了。