特定功能名称“ it”会发生什么?

问题描述

我只是在努力处理一个Haskell错误一个小时,然后将其追溯到使用特定函数it的情况。有人可以解释为什么函数fuit在下面的记录中表现不同吗?具体来说,为什么it的类型在被调用时会发生变化?

λ> fu x = x + 1
λ> :t fu
fu :: Num a => a -> a
λ> fu 1
2
λ> :t fu
fu :: Num a => a -> a
λ> it x = x + 1
λ> :t it
it :: Num a => a -> a
λ> it 1
2
λ> :t it
it :: Num a => a

当ghci重新开始时,它报告it不在范围内,因此我认为it认情况下不应该有任何特殊含义。

解决方法

在GHCi中,it始终绑定到最后求值的表达式,并遮盖其先前的值:

Prelude> 2 + 3
5
Prelude> it
5
Prelude> 3 * 4
12
Prelude> it
12

在GHCi会话开始时,它没有定义。