在ghci中,如何删除现有的绑定?

mhe*_*rzl 9 haskell ghci

我收到一个“绑定影响现有绑定”错误,类似于问题中的错误。

\n\n
Prelude Api.Facility Control.Monad.IO.Class> let t = getBadgesNot 1 (Nothing) (Just 1)\n\n<interactive>:55:5: warning: [-Wname-shadowing]\n    This binding for \xe2\x80\x98t\xe2\x80\x99 shadows the existing binding\n      defined at <interactive>:39:5\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在会话早些时候定义了现有绑定,现在正在尝试重新定义它。有没有办法删除现有的绑定以便我可以重新定义t

\n\n

我注意到在其他情况下 ghci 在重新定义现有绑定时不会出错。例如

\n\n
Prelude> let t = 1\nPrelude> let t = 2\nPrelude> let t = "there"\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么 ghci 在某些情况下重新定义现有绑定时会出错,而在其他情况下不会出错?

\n

Dan*_*ner 4

\n

有没有办法删除现有的绑定以便我可以重新定义t

\n
\n\n

不,您无法删除现有的绑定。不过,您可以t随时重新定义,没问题。

\n\n
\n

为什么 ghci 在某些情况下重新定义现有绑定时会出错,而在其他情况下不会出错?

\n
\n\n

因为您使用不同的警告/错误设置运行 ghci;例如,通过传递-Wname-shadowing命令行(可能是因为您通过 cabal 或堆栈运行 ghci,并且关联的项目在其 .cabal 文件中指定了此选项)。注意:-Wname-shadowing不应阻止您重新定义,t除非与 结合起来-Werror将单纯的警告变成全面的错误。

\n\n

根据您是否使用,该行为似乎也会有所不同let;这可能是一个错误:

\n\n
% ghci -Wname-shadowing -Werror\n> let t=3\n> let t=4\n<interactive>:3:5: warning: [-Wname-shadowing]\n    This binding for \xe2\x80\x98t\xe2\x80\x99 shadows the existing binding\n      defined at <interactive>:1:5\n\n<no location info>: error: \nFailing due to -Werror.\n> t\n3\n> t=4\n> t\n4\n
Run Code Online (Sandbox Code Playgroud)\n