为什么在Haskell中,对于Num和Int类型来说,惰性求值似乎表现不同?

3

如果我在GHCI中执行...

let x = 1 + 2

然后
:sprint x

我理解

x = _

然后如果我这样做
x

3

那么...

:sprint x

我仍然得到

x = _

然而,如果我这样做

let x = 1 + 2 :: Int

然后第二个 :sprint x 告诉我:
3

只是想知道为什么呢?

1个回答

4

看一下 1 + 2 的类型:它是 Num a => a。这意味着它可以是任何数值类型,由使用 x 的人指定。因此,如果你对它进行一次求值,GHCI 的默认规则会使它默认为 Int,然后你会评估 x :: Int,它确实是 3 :: Int。但是,不能将其保存为 x 的值,因为有些人可能会尝试将其用作 x :: Double,例如,答案将不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接