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

标签 variables haskell types binding type-inference

: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/

相关文章:

jquery - 如何使用 jQuery 将超链接文本用作变量?

javascript - 在 jquery 脚本中使用变量

haskell - 神灵如何运作?

matrix - 如何将任意大小的矩阵传递给 Rust 中的函数?

java - org.jooq.Query.getBindValues() 返回的 List<Object> 是否包含每个查询参数的类型安全对象?

r - 将变量定义为范围

javascript - 使用 PHP 和 JavaScript 分隔 SQL 插入的变量

haskell - Monad 变压器 : troubles defining bind due to different monads

haskell - 在 Haskell 中找不到模块 'System.Console.Readline'

C++ 字节字符串转换为字节数据类型并计算字节数