如果我在GHCI中执行...
let x = 1 + 2
然后
:sprint x
我理解
x = _
然后如果我这样做
x
3
那么...
:sprint x
我仍然得到
x = _
然而,如果我这样做
let x = 1 + 2 :: Int
然后第二个 :sprint x 告诉我:
3
只是想知道为什么呢?
如果我在GHCI中执行...
let x = 1 + 2
:sprint x
我理解
x = _
x
3
那么...
:sprint x
我仍然得到
x = _
然而,如果我这样做
let x = 1 + 2 :: Int
3
只是想知道为什么呢?
看一下 1 + 2
的类型:它是 Num a => a
。这意味着它可以是任何数值类型,由使用 x
的人指定。因此,如果你对它进行一次求值,GHCI 的默认规则会使它默认为 Int
,然后你会评估 x :: Int
,它确实是 3 :: Int
。但是,不能将其保存为 x
的值,因为有些人可能会尝试将其用作 x :: Double
,例如,答案将不同。