找不到模块`Data.Map' - 它是隐藏包的成员

问题描述 投票:10回答:2

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

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 '[email protected]'.`
haskell import module haskell-stack
2个回答
13
投票

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


23
投票

These general steps帮助我解决类似的问题:

  1. 使用HoogleStackage查找模块所在的包 请注意,HoogleStackage区分大小写。在Data.Map中查找Hoogle会得到一个类似下面的列表。 Stackage的风格略有不同,但基础是相同的(主要是因为它也使用Hoogle进行查找)。

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

(1)包装(小瓶盖)和

(2)模块(大写)。

Hoogle result for Data.Map

  1. 在项目根目录中打开project-name.cabal并在build-depends:下添加所需的包 library hs-source-dirs: src build-depends: base >= 4.7 && < 5 , containers exposed-modules: Lib
  2. 发出stack build来下载和构建依赖项 (如果您计划在REPL中使用它,还是stack ghci
© www.soinside.com 2019 - 2024. All rights reserved.