Haskell *限定*导入一组函数

时间:2015-01-19 03:26:16

标签: haskell import qualified-name

在Haskell中,我可以导入一个由其名称或快捷方式名称限定的模块,如下所示:

import qualified Data.List as List
import qualified Data.Map

我也可以从模块中仅导入一组精选函数,或者导入除选择集以外的所有函数,如下所示:

import Data.List (sort, intersperse)
import Data.Map hiding (findWithDefault)

是否可以导入一组特定功能,例如上面的import Data.List (sort, intersperse)示例,但是要确保仍然以合格的方式识别功能,例如List.sort和{{1} }?

虽然这不起作用,但这是我所要求的精神:

List.intersperse

或者

import qualified Data.List (sort, intersperse) as List

3 个答案:

答案 0 :(得分:13)

import qualified Data.List as List (sort, intersperse)

这实际上很好并且有效。导入声明的语法如下:

  

5.3导入声明

impdecl   →   import [qualified] modid [as modid] [impspec]

qualifiedas 会阻止导入规范。这不是Haskell2010的补充,因为它是Haskell 98 report的一部分。

另一方面,你的第一个例子

import qualified Data.List (sort, intersperse) as List
--     qualified           impspec!            as modid
--                            ^                    ^         
--                            +--------------------+

不遵循语法,因为如果提供了impspec,它必须是导入声明中的最后一个元素。

答案 1 :(得分:5)

尽管https://www.haskell.org/haskellwiki/Import上没有提到它,import qualified Foo as Bar (x, y)似乎对我有用。我正在运行ghc 7.6.3。也许那个特定的wiki页面已经过时了。如果它对您不起作用,您使用的是什么版本的ghc?

答案 2 :(得分:5)

这是允许的,至少根据Haskell 2010报告。首先看examples,其中包括以下内容:

import qualified A(x)

然后查看actual syntax spec,表示qualifiedas和" impspec" (导入的标识符列表或隐藏标识符列表)都是可选且独立的。因此语法genisage describes实际上是标准的。