GHCi Haskell中的'it'变量是否会发生变异?

gur*_*107 0 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>
Run Code Online (Sandbox Code Playgroud)

Pau*_*son 8

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

it :: (Show a) => IO a
Run Code Online (Sandbox Code Playgroud)

换句话说,你所做的一切都在IO monad中("显示"意味着你必须能够将结果转换为文本进行打印).当您键入一系列表达式时,它的工作方式如下:

do
   it <- foo
   it <- bar
Run Code Online (Sandbox Code Playgroud)

Haskell的"do"表示法对于嵌套的lambdas来说是荒谬的

  foo >>= $ \it ->
     bar >>= $ \it -> ... -- and so on.
Run Code Online (Sandbox Code Playgroud)

换句话说,"it"的值不会改变,而是在影响前一个的范围内声明一个新值.