Haskell*限定*导入一组函数

ely*_*ely 13 import haskell qualified-name

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

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

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

import Data.List (sort, intersperse)
import Data.Map hiding (findWithDefault)
Run Code Online (Sandbox Code Playgroud)

是否可以导入一组特定的函数,import Data.List (sort, intersperse)如上例所示,但是要确保仍然以合格的方式识别函数,例如List.sortList.intersperse

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

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

也许

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

Zet*_*eta 14

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

这实际上很好并且有效.进口声明的语法如下:

5.3导入声明

impdecl   ?   import [qualified] modid [as modid] [impspec]
Run Code Online (Sandbox Code Playgroud)

qualified并且as不会阻止导入规格.这不是Haskell2010的补充,因为它已经成为Haskell 98报告的一部分.

另一方面你的第一个例子

import qualified Data.List (sort, intersperse) as List
--     qualified           impspec!            as modid
--                            ^                    ^         
--                            +--------------------+
Run Code Online (Sandbox Code Playgroud)

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

  • @ prpl.mnky.dshwshr,GHCi对于模块一般都很奇怪,因为它试图对交互式开发友好.如果您想知道您实际需要什么,请编译代码. (2认同)

gen*_*age 5

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


dfe*_*uer 5

这是允许的,至少根据Haskell 2010报告.首先看一下示例,其中包括以下示例:

import qualified A(x)
Run Code Online (Sandbox Code Playgroud)

然后查找到实际语法规范,这表明qualified,as和"impspec"(进口标识符或隐蔽标识符列表的列表)都是可选的,独立的.因此语法genisage 描述实际上是标准的.