F#和类型推断:“int list”不支持“+”

时间:2012-02-04 04:19:32

标签: f# type-inference

为什么以下生成错误?

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

第二个let生成编译错误:

  

对类型推理变量应用默认类型“int list”时,类型约束不匹配。类型'int list'不支持任何名为'+'的运算符。考虑添加更多类型约束

我不明白。为什么假设我输入了一个列表?

完整列表:

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,它就可以正确编译。

1 个答案:

答案 0 :(得分:-1)

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

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