Setting -XTemplateHaskell in GHCi unloads modules that were specified on the command-line
Summary
Running :set -XTemplateHaskell
in ghci
(in some situations) has two side effects:
- The scope is cleared
- Any modules that were specified on the command line are unloaded
While (1) is inconvenient, I have a hard time considering (2) as acceptable.
This also breaks doctest
.
I haven't been able to reproduce the issue without cabal exec
(e.g. with a .ghc.enviroment
-file). Not exactly sure what's the difference.
From the ghci
output
package flags have changed, resetting and loading new packages...
I guess that it's somehow related to this code: https://gitlab.haskell.org/ghc/ghc/-/blob/master/ghc/GHCi/UI.hs#L3120
Steps to reproduce
Given:
-- foo.cabal
cabal-version: 3.6
name: foo
version: 0.0.0
library
build-depends: base
-- Foo.hs
module Foo where
foo :: Int
foo = 23
Run:
$ cabal build . && cabal exec ghci Foo.hs
ghci> foo
23
ghci> :set -XTemplateHaskell
package flags have changed, resetting and loading new packages...
ghci> foo
Expected behavior
foo
should still be in scope:
ghci> foo
23
Actual behavior
foo
is not in scope:
ghci> foo
<interactive>:3:1: error: Variable not in scope: foo
Environment
- GHC version used: 9.2.1
$ cabal --version && uname -s -m
cabal-install version 3.6.2.0
compiled using version 3.6.2.0 of the Cabal library
Linux x86_64
Edited by Simon Hengel