编辑:仅当使用emacs haskell模式和intero模式(C-c C-l
加载到ghci)时才会出现此错误。它使用stack ghc Log.hs LogAnalysis.hs
在命令行中运行。
我通过CIS 194(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.)
使用&C; c C-1'时出现相同的消息。在emacs中加载到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模式,但还没有找到任何可用的解决方案。
感谢您阅读此问题,我们将非常感谢您的帮助!
答案 0 :(得分:1)
intero
似乎需要package.yaml
和stack.yaml
才能找到您的源文件。您只需运行stack init
或stack new
即可自动生成这些项目文件
我好几次遇到这个问题。上面的方法在我的Windows和Fedora上解决了我的问题,所以我希望这对你有帮助。
答案 1 :(得分:1)
在Krantz's answer的帮助下以及更多阅读,通过使用堆栈创建一个新项目来解决问题,因此intero知道我的源文件的位置。
因此,这个问题是由于intero不知道在emacs中的intero-global-mode
中查找本地模块的位置。
在这里,我将在此处写下我自己的答案,以便更多地展开Krantz的答案,并记录作为Haskell初学者解决此问题的过程:
为了让intero能够导入本地模块,我们应该避免使用stack new homework2
而是创建一个本地项目(后见之明对我来说更有意义)。
因此,对于本作业2,不是按照问题中的描述将文件移动到家庭作业文件夹,而是homework2\src
,并将源文件移动到LogAnalysis.hs
。然后,当使用emacs加载*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.
获取:
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_challenge_mode_tutorial);
final LinearLayout layout = (LinearLayout) findViewById(R.id.YOUR_VIEW_ID);
ViewTreeObserver vto = layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener (new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// Remove listener to prevent repeat calls.
layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// Start countdown here.
}
});
}
问题解决了。