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

Opt*_*ght 35 haskell

import Data.List - 我明白了.

但声明中的qualified含义是什么import qualified Data.List?

Dan*_*her 40

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

import qualified Data.List

result :: [Int]
result = Data.List.sort [3,1,2,4]
Run Code Online (Sandbox Code Playgroud)

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

import qualified Data.List as L

result :: [Int]
result = L.sort [3,1,2,4]
Run Code Online (Sandbox Code Playgroud)

合格导入允许使用从多个模块导入的具有相同名称的函数,例如map来自Prelude和map来自Data.Map.


Mat*_*hid 27

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

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

例如,

import Data.List (sort)
Run Code Online (Sandbox Code Playgroud)

这是一个不合格的导入.你现在可以说sort或者Data.List.sort.

import qualified Data.List (sort)
Run Code Online (Sandbox Code Playgroud)

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

因为那是相当冗长的,通常你会说类似的东西

import qualified Data.List (sort) as LS
Run Code Online (Sandbox Code Playgroud)

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


fuz*_*fuz 12

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

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