I am getting a "binding shadows the existing binding" error similar to the one from this question.
Prelude Api.Facility Control.Monad.IO.Class> let t = getBadgesNot 1 (Nothing) (Just 1)
<interactive>:55:5: warning: [-Wname-shadowing]
This binding for ‘t’ shadows the existing binding
defined at <interactive>:39:5
I defined the existing binding earlier in the session, and am now trying to redefine it. Is there a way to remove the existing binding so that I can redefine t
?
I notice that in other circumstances ghci does not error when redefining an existing binding. For example
Prelude> let t = 1
Prelude> let t = 2
Prelude> let t = "there"
Why does ghci error when redefining an existing binding in some cases and not in others?
Quits GHCi. You can also quit by typing control-D at the prompt. Attempts to reload the current target set (see :load ) if any of the modules in the set, or any dependent module, has changed.
Open a command window and navigate to the directory where you want to keep your Haskell source files. Run Haskell by typing ghci or ghci MyFile. hs. (The "i" in "GHCi" stands for "interactive", as opposed to compiling and producing an executable file.)
Is there a way to remove the existing binding so that I can redefine
t
?
No, you cannot remove the existing binding. However, you can redefine t
at any time, no problem.
Why does ghci error when redefining an existing binding in some cases and not in others?
Because you ran ghci with different warning/error settings; e.g. by passing -Wname-shadowing
on the command line (perhaps because you ran ghci through cabal or stack, and the associated project specifies this option in its .cabal file). N.B. -Wname-shadowing
should not prevent you from redefining t
unless combined with -Werror
to turn the mere warning into a full-blown error.
The behavior also appears to differ depending on whether you use let
or not; this is probably a bug:
% ghci -Wname-shadowing -Werror
> let t=3
> let t=4
<interactive>:3:5: warning: [-Wname-shadowing]
This binding for ‘t’ shadows the existing binding
defined at <interactive>:1:5
<no location info>: error:
Failing due to -Werror.
> t
3
> t=4
> t
4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With