无法从Haskell中的已安装包中导入类型构造函数

时间:2016-08-29 20:34:57

标签: haskell module

我正在尝试使用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.

这令人费解。我是否必须更改已安装的软件包并将StreamCons添加到其导出列表中?或者我没有正确导入模块?

1 个答案:

答案 0 :(得分:1)

您导入的模块错误;查看链接顶部的模块名称为Data.Stream。 (Stream是包的名称 - 它命名要安装的模块的集合。)因此,如果你写的话,事情应该更好。

import Data.Stream

tail' :: Stream a -> Stream a
tail' (Cons x s) = s

咒语import Stream工作的事实向我表明你安装了另一个提供此模块的软件包,虽然我不确定哪个。