它如何变成混凝土类型?



我有以下值:

Prelude Data.Monoid> [1,2,3,4,5 :: Sum Integer]
[Sum {getSum = 1},Sum {getSum = 2},Sum {getSum = 3},Sum {getSum = 4},Sum {getSum = 5}]

如您所见,1..4是整数,5是一种Sum Integer
列表的内容如何变成类型Sum Integer?里面有更多的Integers,为什么不变成Integer

1..4 是整数,5 是 Sum Integer 的一种

类型

不完全是。[1, 2, 3, 4, 5]属于Num t => [t]类型,其中类型t是等待推断为刚性类型的Num的实例。

当您指出其中一个元素是Sum Integer时,编译器会将列表中的所有其他元素推断为同一类型。

因此,列表变为类型[1,2,3,4,5 :: Sum Integer] :: [Sum Integer],正是您在输出中看到的内容。

最新更新