我猜这是一个初学者错误.我写了一个hs文件
let mylist = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
当我运行它使用:加载ghci我得到以下错误
解析错误(可能是错误的缩进)
当我处于Prelude模式时,该语句有效.所以基本上我想知道为什么加载文件时这不起作用,Prelude和Main之间有什么区别?
在GHCi中,语法有点不同,因为它有点像你在do-block中,所以你必须使用let x = ...表单.在Haskell源文件中,您只需删除let并写入:
mylist = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
至于Prelude和之间的区别Main,它Prelude是一个标准模块,它定义了最常见的Haskell类型和函数,默认情况下它被导入到每个Haskell模块中.
Main只是module Foo where ...顶部没有的模块的默认名称.
将GHCi与默认设置一起使用时,提示会显示当前哪些模块在范围内.如果您刚刚启动GHCi而没有加载文件,这将只是Prelude,所以提示符如下所示:
Prelude>
Run Code Online (Sandbox Code Playgroud)
加载模块后,提示符将更改为显示已进入作用域的新模块.如前所述,Main如果你没有给它一个不同的名字,那将是这样.
*Main>
Run Code Online (Sandbox Code Playgroud)
星号表示模块已在解释模式下加载,这意味着模块中范围内的所有内容也将在GHCi提示符的范围内,包括从其他模块(例如Prelude.)导入的内容.
您可以使用该:m命令将其他模块放入范围.请注意提示如何更改以显示其他模块.
*Main> :m + Data.List
*Main Data.List>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请键入:helpGHCi或阅读GHC用户指南的GHCi章节.
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |