找不到模块“Data.Map”——它是隐藏包的成员

Could not find module `Data.Map' -- It is a member of the hidden package

首先,我创建了一个新的工作区:

stack new xxxx
stack init
stack build

然后

cd xxx\app
stack ghci
import Data.Map

我可以导入 Data.CharData.List 等其他模块,但无法导入 Data.Map。 GHCi 告诉我:

Could not find module 'Data.Map'
 It is a member of the hidden package 'containers-0.5.7.1@containers-0.5.7.1'.`

您可以导入 Data.CharData.List 的原因是它们是软件包 base 的一部分,它包含在 GHC 中并且始终与 GHCi 一起加载。相比之下,Data.Map 在外部库 containers 中。使用 stack ghci 加载它的一种方法是在 containers 上添加一个带有 build-depends 的 cabal 文件。这会将其安装在 xxxx 的堆栈环境中,因此之后即可访问。

These general steps 对我解决类似问题很有帮助:

  1. 使用Hoogle or Stackage查找模块所在的包

    请注意 Hoogle and Stackage are case-sensitive. Looking up Data.Map in Hoogle yields a list similar to the one below. Stackage 的风格略有不同,但基本原理是相同的(主要是因为它也使用 Hoogle 进行查找)。

结果标题下的绿色线条显示包含

的名称

(1) 个包(小型大写字母)和

(2) 个模块(大写)。

  1. 打开 project-name.cabal 在项目根目录下添加需要的包 build-depends:

    library
      hs-source-dirs:
          src
    
      build-depends:
          base >= 4.7 && < 5
        , containers
    
      exposed-modules:
          Lib
    
  2. 发布 stack build 下载并构建依赖项

    (或 stack ghci 如果您打算在 REPL 中使用它)