我有以下值:
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]
,正是您在输出中看到的内容。