【发布时间】:2015-01-19 03:26:15
【问题描述】:
在 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 和 List.intersperse?
虽然这行不通,但这是我所要求的精神:
import qualified Data.List (sort, intersperse) as List
或许
import qualified Data.List as List (sort, intersperse)
【问题讨论】:
-
来自haskell.org/haskellwiki/Import 看起来这是不可能的,但我不确定它有什么好处。由于您可以指定自己的前缀,因此它可以随心所欲,并且不存在与任何其他模块发生冲突的风险。
import qualified Data.List as List有什么害处?唯一的区别是List.intercalate将可用:只要你从不输入,你就不会知道区别,可以这么说。 -
你也可以只创建一个辅助模块,简单地重新导出
sort和intersperse,然后对该模块进行合格的导入。 -
@amalloy “没有与任何其他模块发生冲突的风险”不一定正确。您可以根据需要导入任意数量的同名模块,例如,我可以想象想要从
Prelude获得A.map而从Data.Foldable获得A.foldr,因此会引入许多名称冲突。
标签: haskell import qualified-name