Is there a simple way to load extra packages to ghci when invoked via cabal repl?

10.3k Views Asked by At

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

There are 4 best solutions below

3
On BEST ANSWER
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
0
On

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.

0
On

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"
0
On

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.