GHCi Haskell中的“it”变量是否发生变异?

GHCi Haskell中的“it”变量是否发生变异?,haskell,functional-programming,ghci,Haskell,Functional Programming,Ghci,刚从Haskell开始,据说Haskell有不可变的变量。那么为什么每次在GHCi提示符中输入表达式时,“it”变量都会不断改变其值呢 GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help Prelude> 7*2 14 Prelude> it 14 Prelude> "foo" "foo" Prelude> it "foo" Prelude> 键入到ghci中的表达式具有隐式类型 it ::

刚从Haskell开始,据说Haskell有不可变的变量。那么为什么每次在GHCi提示符中输入表达式时,“it”变量都会不断改变其值呢

GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
Prelude> 7*2
14
Prelude> it
14
Prelude> "foo"
"foo"
Prelude> it
"foo"
Prelude>

键入到ghci中的表达式具有隐式类型

it :: (Show a) => IO a
换句话说,你所做的一切都是在IO单子中显示的,这意味着你必须能够将结果转换为文本进行打印。在中键入一系列表达式时,其工作方式如下:

do
   it <- foo
   it <- bar

换句话说,它的值没有改变,而是在一个范围内声明了一个新值,该范围覆盖了前一个值。

它不是突变;只是影射而已。请看最后一部分是真的。第一部分不太清楚,令人困惑。@dfeuer:请随意详细说明。@PaulJohnson好吧,实际上ghci处理表达式的方式有三种。您描述的一个,没有IO的可显示表达式,以及没有可显示结果的IO表达式。
  foo >>= $ \it ->
     bar >>= $ \it -> ... -- and so on.