导入"base"System.IO

art*_*lla 3 haskell ghc

packages-haskell2010/System/IO.hs中,我们有以下行:

import "base" System.IO hiding (openFile, hWaitForInput)
Run Code Online (Sandbox Code Playgroud)

导入时import未记录此形式(其后跟一个字符串,然后是模块名称).假设String(在本例中)只是引用一个目录,我是否正确?"base"

Zet*_*eta 7

字符串引用包,因为这是包限定的导入.该扩展程序已启用

{-# LANGUAGE PackageImports #-}
Run Code Online (Sandbox Code Playgroud)

可以使用它来包含命名包中的给定模块.在您的情况下,它将System.IO从包"base" 导入:

使用该-XPackageImports标志,GHC允许导入声明由要从中导入模块的包名称限定.例如:

import "network" Network.Socket
Run Code Online (Sandbox Code Playgroud)

将从Network.Socket包网络(任何版本)导入模块.当相同模块可从多个包中获得时,或者在正在构建的当前包和外部包中都存在时,这可用于消除导入的歧义.

如果您想知道系统上有哪些软件包,请使用ghc-pkg list.请注意,ghc-pkg recache如果您在cabal中中止了软件包的安装,则可能需要一个,并且recache可能需要管理员权限(取决于您的平台).