具体类型怎么样?

时间:2017-08-14 06:39:44

标签: haskell

我有以下价值:

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是整数,5Sum Integer的类型。
列表的内容如何变为Sum Integer类型?内部有更多Integers,为什么不成为Integer

1 个答案:

答案 0 :(得分:10)

  

1..4是整数,5是Sum Integer的类型

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

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

因此,列表变为[1,2,3,4,5 :: Sum Integer] :: [Sum Integer]类型,就像您在输出中看到的那样。