在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
答案 0 :(得分:13)
import qualified Data.List as List (sort, intersperse)
这实际上很好并且有效。导入声明的语法如下:
5.3导入声明
impdecl → import [qualified] modid [as modid] [impspec]
qualified
和as
不会阻止导入规范。这不是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,表示qualified
,as
和" impspec" (导入的标识符列表或隐藏标识符列表)都是可选且独立的。因此语法genisage describes实际上是标准的。