在 Haskell 中,为什么将值绑定到变量名不再强制系统提交类型?

Pet*_*ake 3 variables binding haskell types type-inference

:t 3给出3 :: Num a => a,因为文字 3 没有特定类型。

早在 2013 年,当我制作这个视频时,如果我用 绑定 3 到变量名let x = 3,Haskell 必须提交一个类型,所以:t x会给出x :: Integer。

不过,当我最近(2022 年)重复这一点时,我得到了x :: Num a => a. 显然,绑定到变量的值现在可以延迟提交到类型。

发生了什么变化?

Car*_*arl 7

这种行为是单态限制的结果。默认情况下,该限制在常规编译中仍然处于启用状态,但在 ghci 中被禁用,因为如果没有全局推断,它会变得更加笨拙。

\n

https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/monomorphism.html

\n
\n

从 GHC 7.8.1 开始,GHCi\xe2\x80\x99s 交互选项中的单态限制默认关闭

\n
\n