:t 3
给出 3::Num a => a
,因为文字 3 没有特定类型。
早在 2013 年我制作 this video 时,如果我用 let x = 3
将 3 绑定(bind)到一个变量名,Haskell 将不得不提交一个类型,所以 :t x
将给出 x::Integer
.
不过,当我最近(2022 年)重复此操作时,我得到了 x::Num a => a
。显然,绑定(bind)到变量的值现在可以延迟提交类型。
发生了什么变化?
最佳答案
这种行为是单态限制的结果。该限制在常规编译中仍默认启用,但在 ghci 中已禁用,因为没有全局推理,它更加笨拙。
https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/monomorphism.html
Since GHC 7.8.1, the monomorphism restriction is switched off by default in GHCi’s interactive options
关于variables - 在 Haskell 中,为什么将值绑定(bind)到变量名不再强制系统提交类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73861000/