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

3

29

First, I created a new workspace:

stack new xxxx
stack init
stack build

then

cd xxx\app
stack ghci
import Data.Map

I can import other modules like Data.Char and Data.List, but I can't import Data.Map. GHCi told me:

Could not find module 'Data.Map'
 It is a member of the hidden package '[email protected]'.`
Calvert answered 25/9, 2016 at 6:14 Comment(0)
N
20

The reason you can import Data.Char and Data.List is that they are part of the package base, which is included with GHC and is always loaded with GHCi. By contrast, Data.Map is in the external library containers. One way to load it with stack ghci is to add a cabal file with a build-depends on containers. This will install it in the stack environment for xxxx, so it will then be accessible.

Navaho answered 25/9, 2016 at 6:42 Comment(1)
I'm not sure what you're asking. Create a cabal file xxxx.cabal, add a library/executable section, and add containers in the build-depends section. See this answer.Navaho
V
46

These general steps were helpful for me to resolve similar issues:

  1. Use Hoogle or Stackage to find the package where the module resides

    Note that Hoogle and Stackage are case-sensitive. Looking up Data.Map in Hoogle yields a list similar to the one below. Stackage has a slightly different style, but the basics are the same (mostly because it also uses Hoogle for lookup).

The lines in green under the result headings show the name(s) of the containing

(1) package(s) (in small caps) and

(2) module(s) (capitalized).

Hoogle result for Data.Map

  1. Open project-name.cabal in project root and add required package under build-depends:

    library
      hs-source-dirs:
          src
    
      build-depends:
          base >= 4.7 && < 5
        , containers
    
      exposed-modules:
          Lib
    
  2. Issue stack build to download and build dependencies

    (or stack ghci if you plan to use it in the REPL)

Vowel answered 15/3, 2018 at 4:26 Comment(4)
Thanks for the explanation! (the previous answer "gave me a fish" instead of "showing me how to fish")Paraglider
@dfeuer Thanks a lot for the edit! I just realized how inaccessible it was with the image...Vowel
@toraritte, you're welcome. Hopefully we'll be able to make some progress towards accessibility.Bulb
I put containers to package.yaml file, under library-> dependencies, and it workedElga
N
20

The reason you can import Data.Char and Data.List is that they are part of the package base, which is included with GHC and is always loaded with GHCi. By contrast, Data.Map is in the external library containers. One way to load it with stack ghci is to add a cabal file with a build-depends on containers. This will install it in the stack environment for xxxx, so it will then be accessible.

Navaho answered 25/9, 2016 at 6:42 Comment(1)
I'm not sure what you're asking. Create a cabal file xxxx.cabal, add a library/executable section, and add containers in the build-depends section. See this answer.Navaho
E
5

I my case I had to add containers to package.yaml instead of adding the dependency directly to the .cabal file:

dependencies:
- base >= 4.7 && < 5
- containers
Easting answered 22/10, 2022 at 16:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.