代码之家  ›  专栏  ›  技术社区  ›  mherzl

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

  •  8
  • mherzl  · 技术社区  · 7 年前

    this 问题

    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
    

    我在会话的早些时候定义了现有的绑定,现在正试图重新定义它。 t

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

    Prelude> let t = 1
    Prelude> let t = 2
    Prelude> let t = "there"
    

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   Daniel Wagner    7 年前

    有没有办法删除现有的绑定,这样我就可以重新定义 t

    不,不能删除现有绑定。然而,你可以重新定义 t 任何时候都没问题。

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

    -Wname-shadowing 在命令行上(可能是因为您通过cabal或stack运行了ghci,并且相关项目在其.cabal文件中指定了此选项)。N、 B。 -Wname阴影 t -Werror 把单纯的警告变成一个全面的错误。

    let 是否;这可能是一个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