gpt4 book ai didi

haskell - 为什么我不能在 Haskell 中将 Integer 添加到 Double ?

转载 作者:行者123 更新时间:2023-12-02 08:09:11 25 4
gpt4 key购买 nike

为什么我能做到:

1 + 2.0

但是当我尝试时:

let a = 1
let b = 2.0
a + b

<interactive>:1:5:
Couldn't match expected type `Integer' with actual type `Double'
In the second argument of `(+)', namely `b'
In the expression: a + b
In an equation for `it': it = a + b

这看起来很奇怪!它会让你绊倒吗?

P.S.:我知道“1”和“2.0”是多态常量。我担心的不是这个。让我担心的是为什么 haskell 在第一种情况下做了件事,但在第二种情况下又做了另一!

最佳答案

(+) 的类型签名定义为 Num a => a -> a -> a,这意味着它适用于 的任何成员code>Num 类型类,但两个参数必须属于同一类型。

这里的问题在于 GHCI 及其建立类型的顺序,而不是 Haskell 本身。如果您将任意一个示例放入一个文件中(使用 do 作为 let 表达式),它将编译并运行良好,因为 GHC 会使用整个函数作为context 来确定文字 12.0 的类型。

第一种情况中发生的一切是 GHCI 猜测您输入的数字的类型。最精确的是 Double,因此它只是假设另一个应该是 Double 并执行计算。但是,当您使用 let 表达式时,它只有一个数字可供使用,因此它决定 1 是一个 Integer2.0 是一个

编辑:GHCI 并不是真正的“猜测”,它使用 Haskell 报告中定义的非常具体的类型默认规则。您可以阅读更多相关内容 here .

关于haskell - 为什么我不能在 Haskell 中将 Integer 添加到 Double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com