Question

I'm trying to use http://hackage.haskell.org/package/persistent-1.2.3.0, but after installing it through "cabal install persistent", ghc doesn't find its exposed-modules:

Prelude> import Database.Persist.Types

<no location info>:
    Could not find module `Database.Persist.Types'
    It is not a module in the current program, or in any known package.

And ghc-pkg works fine:

$ ghc-pkg find-module Database.Persist.Types
/var/lib/ghc/package.conf.d
/home/apsk/.ghc/x86_64-linux-7.6.3/package.conf.d
   persistent-1.2.3.0

Am I missing something or is this just a bug with cabal/persistent/ghc? My ghc is 7.6.3, btw.

Also, I've tried with no effect: "ghc-pkg recache"; "ghc-pkg check"; installing previous version; reinstalling with and without "sudo" and/or "--global".

Était-ce utile?

La solution

  1. Check that you're not using sandboxes, cabal-dev, hsenv, anything else that can influence ghc in looking for dependencies. Make sure you're using ghc/ghci, and not any wrappers, and that ghc/ghci are not aliased to anything in your shell.

  2. Try to specify the package-db explicitly:

    ghci -package-db /home/apsk/.ghc/x86_64-linux-7.6.3/package.conf.d
    
  3. If you launch ghci with -v, it'll print the (caches of) databases it looks at, like this:

    % ghci -v 
    GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
    Glasgow Haskell Compiler, Version 7.6.3, stage 2 booted by GHC version 7.4.2
    Using binary package database: /opt/ghc763/lib/ghc-7.6.3/package.conf.d/package.cache
    Using binary package database: /home/feuerbach/.ghc/i386-linux-7.6.3/package.conf.d/package.cache
    

    Make sure that the database which has persistent is listed there.

Autres conseils

Hopefully helpful to someone. Using ghci -v I looked to see if persistent was there, and saw this:

package persistent-2.0.8-cec952b1a61645f47dbec3b0b0cbcef4 is unusable due to missing or recursive dependencies:  aeson-0.8.0.0-1bd8b5254a1dd30c0fe6acc346ad7de7 attoparsec-0.12.1.2-48393fcdbcf426085b696dc4409d9270 conduit-1.2.0.2-39f9cd0430ed7b7f4306899cbeb1ed83 monad-logger-0.3.7.2-3e6a80e9b3adf31497ff04514bdf2919 resource-pool-0.2.3.0-c02186641e7173f72887d5e65a646ac1 scientific-0.3.3.1-13e0eefbd7215e4503420c3d0a6fdb82 unordered-containers-0.2.5.0-147c3bb8f4a2da7d753455e75af30b92

So I looked around on SO (saw this: Haskell Cabal: Mysterious missing or recursive dependencies) but didn't find a great answer. I did find a good one here though:

$ ghc-pkg list Cabal

Which revealed I had 2 goddamn cabals! One in user and one in global. Ugh. So I was able to do ghc-pkg unregister --user Cabal-1.18.1.3 --force to get rid of the old one. Then cabal install cabal automatically went for 1.20, implicitly into user without any flag (the alternate would be --global).

The problem only occurs in GHCi, right? Have you restarted GHCi since installing persistent? (Maybe there's another way to get GHCi to pick up newly installed packages, but I'm not aware of it.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top