'合格'在'import qualified Data.List'语句中的含义是什么?

时间:2012-06-30 14:28:58

标签: haskell

import Data.List - 我明白了。

qualified语句中import qualified Data.List的含义是什么?

3 个答案:

答案 0 :(得分:38)

合格导入使得导入的实体仅以合格的形式可用,例如

import qualified Data.List

result :: [Int]
result = Data.List.sort [3,1,2,4]

只有import Data.List,实体以合格的形式和不合格的形式提供。通常,只是进行合格的导入会导致名称太长,所以你

import qualified Data.List as L

result :: [Int]
result = L.sort [3,1,2,4]

合格导入允许使用从多个模块导入的具有相同名称的功能,例如来自map的{​​{1}}和来自Prelude的{​​{1}}。

答案 1 :(得分:26)

如果您执行非限定导入(默认设置),则可以引用仅通过其名称导入的任何内容。

如果您进行了限定导入,则必须在名称前加上从中导入的模块。

如,

import Data.List (sort)

这是一个不合格的导入。您现在可以说sortData.List.sort

import qualified Data.List (sort)

这是合格的导入。现在sort本身不起作用,你必须说Data.List.sort

因为这很长,通常你会说像

import qualified Data.List (sort) as LS

现在你可以写LS.sort,这是更短的。

答案 2 :(得分:11)

关键字qualified表示导入模块中的符号不​​会导入非限定(无前缀)命名空间。它们仅提供完整的合格名称。例如,foldr'具有非限定名称foldr'和限定名称Data.List.foldr'

使用合格的导入来防止命名空间污染。也可以使用import qualified Foo as BarFooBar导入,但名称就像导入来自import qualified Data.List as L一样。例如,如果您输入foldr',则可以将L.foldr'用作{{1}}。