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)
键入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"的值不会改变,而是在影响前一个的范围内声明一个新值.