我正在尝试使用this package中定义的Stream
类型。在使用cabal安装后,我尝试在流上定义尾部函数作为快速测试:
import Stream
tail' :: Stream a -> Stream a
tail' (Cons x s) = s
这给了我这个错误信息:
test.hs:3:14: error:
Not in scope: type constructor or class `Stream'
Perhaps you meant `StreamT' (imported from Stream)
test.hs:3:26: error:
Not in scope: type constructor or class `Stream'
Perhaps you meant `StreamT' (imported from Stream)
test.hs:4:12: error: Not in scope: data constructor `Cons'
Failed, modules loaded: none.
在一些搜索之后,我认为问题可能是导入模块不会自动导入类型构造函数Stream
和构造函数Cons
。所以我把它改成了
import Stream (Stream, Cons)
tail' :: Stream a -> Stream a
tail' (Cons x s) = s
之后我得到了
test.hs:1:20: error: Module `Stream' does not export `Stream'
test.hs:1:28: error: Module `Stream' does not export `Cons'
Failed, modules loaded: none.
这令人费解。我是否必须更改已安装的软件包并将Stream
和Cons
添加到其导出列表中?或者我没有正确导入模块?
答案 0 :(得分:1)
您导入的模块错误;查看链接顶部的模块名称为Data.Stream
。 (Stream
是包的名称 - 它命名要安装的模块的集合。)因此,如果你写的话,事情应该更好。
import Data.Stream
tail' :: Stream a -> Stream a
tail' (Cons x s) = s
咒语import Stream
工作的事实向我表明你安装了另一个提供此模块的软件包,虽然我不确定哪个。