Haskell 当类型变量应该是不明确的时,为什么会推断整数?
这个小小的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
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更容易作为计算器使用的大难题。但它确实让生活变得更加轻松,因为我们不必在像您这样的程序中显式注释文字类型,这也会让人困惑。我知道链接问题中的答案提到默认值,但仍然将问题标记为“什么是单态限制?”这是误导性的,因为单态限制在这里不相关。