函数组合参数错误

时间:2015-02-06 08:23:50

标签: f#

我有以下代码段:

let add n x = x + n
let times n x = x * n
let addTimes = add 5 >> times 5
addTimes 4 

这没有任何问题。但是当我像这样改变时

let add n x = x + n
let times n x = x * n
let addTimes = add >> times
addTimes 4 

我收到了编译错误

error FS0071: Type constraint mismatch when applying the default type '(int -> int)' for a type inference variable. Expecting a type supporting the operator '*' but given a function type. You may be missing an argument to a function. Consider adding further type constraints

为什么?

1 个答案:

答案 0 :(得分:2)

(>>)的签名是('T1 -> 'T2) -> ('T2 -> 'T3) -> 'T1 -> 'T3。即,它组成了两个一元函数 - 你试图提供两个二进制函数,这些函数通常是有效的(尽管可能没用,或者至少不清楚),但不适用于你的< / em>功能类型:

鉴于(f >> g) x等同于g(f(x)),当f为二进制时,预期结果是什么?在您的情况下,xint)已部分应用于addint -> int -> int),并且该部分应用((int -> int))将传递给{{ 1}}(也是times),显然希望int -> int -> int作为其第一个参数而不是函数类型int