通常,当您导入某些内容时,您会这样做:
import Data.Foo -- A module that contains "data Bar = Bar ..."
myfunction = Bar 3 2 4 -- Use Bar
如您所见,您可以Data.Foo
直接访问模块中的所有内容,就像您在同一个模块中编写代码一样。
您可以改为导入带有限定的东西,这意味着您必须在每次访问时指定完整的模块“路径”到您所指的东西:
import qualified Data.Foo -- A module that contains "data Bar = Bar ..."
myfunction = Data.Foo.Bar 3 2 4 -- Use Bar
在这里,您必须指定要访问的数据类型的完整“路径”,因为该模块已作为合格导入。
还有另一种方法可以导入有资格的东西;您可以为模块“路径”指定别名,如下所示:
import qualified Data.Foo as Foo -- A module that contains "data Bar = Bar ..."
myfunction = Foo.Bar 3 2 4 -- Use Bar
我们已将该Data.Foo
部分重命名为 simple Foo
。这样,我们可以Foo.Bar
在引用数据构造函数的时候编写。
Data.Vector.Unboxed
您使用别名导入了模块Vector
。这意味着当您要访问Vector
数据类型时,您必须使用Vector.Vector
. 我建议您改为导入这样的向量:
import Data.Vector.Unboxed (Vector)
import qualified Data.Vector.Unboxed as Vector
这样,你Vector
直接导入类型,这样你就可以在没有任何模块限定符的情况下访问它,但是当你想使用Vector
函数时,你需要添加Vector
前缀(例如Vector.null ...
)。