Haskell 当类型变量应该是不明确的时,为什么会推断整数?

Haskell 当类型变量应该是不明确的时,为什么会推断整数?,haskell,type-inference,Haskell,Type Inference,这个小小的Haskell程序从控制台读取两个空格分隔的数字,并打印它们的总和: main = do line <- getLine let n1:n2:_ = map read $ words line print $ n1 + n2 main=do lineHaskell有一个处理数值类(Num、fractive和其他一些)的特例,它为不明确的类型变量选择默认类型。(有关详细信息,请参阅。) 其工作方式是尝试一系列数字类型,直到其中一个满足所有约束。默认情况下,它首先尝试I

这个小小的Haskell程序从控制台读取两个空格分隔的数字,并打印它们的总和:

main = do
  line <- getLine
  let n1:n2:_ = map read $ words line
  print $ n1 + n2
main=do

lineHaskell有一个处理数值类(
Num
fractive
和其他一些)的特例,它为不明确的类型变量选择默认类型。(有关详细信息,请参阅。)

其工作方式是尝试一系列数字类型,直到其中一个满足所有约束。默认情况下,它首先尝试
Integer
,然后尝试
Double
,但您也可以按模块进行控制:

default (Int, Rational)
如果要关闭模块的默认设置,请不要为其提供任何类型:

default ()

老实说,这是一个使Haskell更容易作为计算器使用的大难题。但它确实让生活变得更加轻松,因为我们不必在像您这样的程序中显式注释文字类型,这也会让人困惑。

我知道链接问题中的答案提到默认值,但仍然将问题标记为“什么是单态限制?”这是误导性的,因为单态限制在这里不相关。