特定函数名称 'it' 会发生什么?

What happens with a specific function name '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 会话开始时,未定义。