25
votes

cabal repl is quite useful for debugging a library, however ghci will have all packages hidden that aren't dependencies of the cabal package. While that is certainly a good thing for cabal build, for repl it means I can't load something from an unrelated package for a quick test.

I can access any package by issuing :set -package, but that'll unload all modules from the pacakge I'm working on, defeating the point of cabal repl.

What's a nice way to simply load packages I have installed, but don't want as dependencies to my library?

4

4 Answers

31
votes
cabal repl --ghc-option='-package xyz'

This will load the package you are calling cabal repl from and the package xyz.

To do that after the fact, i.e. when you're already in the REPL and want to load an extra helper module from another package:

GHCi> :set -package xyz
GHCi> :m +XYZ.Module.You.Suddenly.Need
4
votes

When I needed QuickCheck library in scope of ghci I tried

cabal repl --ghc-option='-package QuickCheck'

and it didn't work at all.

The following saved my day

cabal repl --build-depends "QuickCheck >= 2.14"
2
votes

One way (not optimal though) would be to modify your cabal file and add a manual/false flag extra_dependency, add the dependencies you need in a conditional build-depends section.

The problem indeed, is you need to manually edit the cabal file each you want to access an hidden library but at least, you library doesn't depend officially on those libraries.

Otherwise, you might be able to set the module path to look into your sandbox cache.

2
votes

This is only tangential. I searched for how to do with stack repl. With Stack you do:

stack repl --package xyz

Here repl is synonymous with ghci.