【问题标题】:Could not find module `Data.Map' -- It is a member of the hidden package找不到模块“Data.Map”——它是隐藏包的成员
【发布时间】:2016-09-25 06:14:31
【问题描述】:

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

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'.`

【问题讨论】:

    标签: haskell import module haskell-stack


    【解决方案1】:

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

    1. 使用HoogleStackage查找模块所在的包

      请注意,HoogleStackage区分大小写。在Hoogle 中查找Data.Map 会产生一个类似于下面的列表。 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 中使用它)

    【讨论】:

    • 感谢您的解释! (上一个答案是“给了我一条鱼”而不是“教我怎么钓鱼”)
    • @dfeuer 非常感谢您的编辑!我才意识到它是多么难以访问图像......
    • @toraritte,不客气。希望我们能够在可访问性方面取得一些进展。
    【解决方案2】:

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

    【讨论】:

    • 我不确定你在问什么。创建一个cabal文件xxxx.cabal,添加一个库/可执行部分,并在build-depends部分添加containers。见this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多