如果我这样做GHCI。
let x = 1 + 2
然后
:sprint x
我得到了
x = _
然后,如果我做
x
3
然后..
:sprint x
我还是
x = _
但是,如果我这样做
let x = 1 + 2 :: Int
然后是第二个:sprint x给了我
3
只是想知道为什么会这样?
答案 0 :(得分:4)
查看1 + 2
的类型:它是Num a => a
。这意味着它可以是任何数字类型,由使用x
的任何人指定。因此,如果您评估一次,GHCI的默认规则意味着默认为Int
,然后您评估x :: Int
,这确实是3 :: Int
。但是,这不能保存为x
的值,因为有人可能会稍后尝试将其用作x :: Double
,并且答案会有所不同。