55

我明白了import Data.List

但是qualified声明中的意思是什么import qualified Data.List

4

3 回答 3

59

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

import qualified Data.List

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

使用 just import Data.List,实体以合格形式和不合格形式提供。通常,只做一个合格的导入会导致名字太长,所以你

import qualified Data.List as L

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

合格的导入允许使用从多个模块导入的同名函数,例如mapfromPreludemapfrom Data.Map

于 2012-06-30T14:30:38.453 回答
45

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

如果您进行了合格的导入,则必须在名称前加上导入它的模块。

例如,

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,它更短。

于 2012-06-30T14:32:43.040 回答
17

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

一种使用合格的导入来防止命名空间污染。也可以使用import qualified Foo as Bar, 导入自,Foo但名称好像导入源自Bar. 例如,如果您键入import qualified Data.List as L,则可以使用foldr'as L.foldr'

于 2012-06-30T14:32:18.470 回答