F# F“和类型推断:”;int list";不支持“+&引用;

F# F“和类型推断:”;int list";不支持“+&引用;,f#,type-inference,F#,Type Inference,为什么下面的代码会产生错误 let mult a b = a * b let sum a b = a + b 第二个let生成编译错误: 为类型推断变量应用默认类型“int list”时,类型约束不匹配。类型“int列表”不支持任何名为“+”的操作符,考虑添加其他类型约束 我不明白。为什么它假设我正在输入一个列表 完整列表: let sampleTimeSeries = dict [ "20110131", 1.5; "20110228", 1.5; "20110331",

为什么下面的代码会产生错误

let mult a b = a * b
let sum a b = a + b
第二个let生成编译错误:

为类型推断变量应用默认类型“int list”时,类型约束不匹配。类型“int列表”不支持任何名为“+”的操作符,考虑添加其他类型约束

我不明白。为什么它假设我正在输入一个列表

完整列表:

let sampleTimeSeries = 
  dict [
  "20110131", 1.5; 
  "20110228", 1.5;
  "20110331", 1.5; 
  "20110431", 1.5; 
  "20110531", 1.5; 
]
//  Recursive reduce function
//  func  : The function to apply
//  terminatingvalue : The terminating value
//  sequence : The list to apply the value on.
let rec reduce func sequence terminatingValue:int =
  match sequence with 
  | [] -> terminatingValue 
  | h::t -> func h (reduce func t terminatingValue)

let mult a b = a * b
let sum a b = a + b + 0

一旦我在sum函数的末尾添加了一个0,它就正确地编译了。

在声明的末尾添加一个0有助于编译器推断
sum
函数的返回类型:

let mult a b = a * b 
let sum a b = a + b + 0 

对我来说,F#2.0.0.0不是一个错误-也许您有一些早期的代码导致了错误?问题可能在于此代码段下面的代码,其中使用了
sum
。更新后的代码在
fsi
fsc
中仍然很好-您确定这是给出错误的代码吗?它们只是声明。您实际在哪里使用
sampleTimeSeries
reduce
mult
sum
?请发布一个完整的例子。我知道它们只是声明。声明给出了如上所述的错误。似乎将0添加到要添加的元素列表的末尾可以让编译器正确推断int的返回类型。可能这还不清楚。我不认为这是真正的答案-这里还有其他一些潜在问题导致了问题。虽然这是可行的,但它不应该是必需的,并且所有发布的示例运行良好,而不需要额外的
0