在packages-haskell2010/System/IO.hs中,我们有以下一行:
import "base" System.IO hiding (openFile, hWaitForInput)
这种形式的import
(后面跟着一个字符串,然后是一个模块名称)没有记录在Import。假设String(在本例中为"base"
)只是引用一个目录吗?
答案 0 :(得分:7)
字符串引用包,因为它是package-qualified import。该扩展程序由
启用{-# LANGUAGE PackageImports #-}
可以使用它来包含命名包中的给定模块。在您的情况下,它将从包“base”导入System.IO
:
使用
-XPackageImports
标志,GHC允许导入声明由要从中导入模块的包名称限定。例如:import "network" Network.Socket
将从包网络(任何版本)导入模块
Network.Socket
。这可用于在多个包中提供相同模块时消除导入的歧义,或者在正在构建的当前包和外部包中都存在。
如果您想了解系统中的软件包,请使用ghc-pkg list
。请注意,如果您在cabal中中止了软件包的安装,则可能需要ghc-pkg recache
,recache
可能需要管理员权限(具体取决于您的平台)。