函数组合参数错误
Function composition argument error
我有以下代码片段:
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
为什么?
(>>)
的签名是('T1 -> 'T2) -> ('T2 -> 'T3) -> 'T1 -> 'T3
。也就是说,它由两个 unary 函数组成——您试图提供两个二元函数,这通常是有效的(尽管可以说没有用,或者至少不清楚),但不适用于 你的函数类型:
鉴于 (f >> g) x
等价于 g(f(x))
,当 f
是二进制时,预期结果是什么?在您的情况下,x
(int
) 部分应用于 add
(int -> int -> int
),并且该部分应用 ((int -> int)
) 被传递给 times
(也就是 int -> int -> int
),这显然需要一个 int
作为它的第一个参数,而不是函数类型 (int -> int)
.
我有以下代码片段:
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
为什么?
(>>)
的签名是('T1 -> 'T2) -> ('T2 -> 'T3) -> 'T1 -> 'T3
。也就是说,它由两个 unary 函数组成——您试图提供两个二元函数,这通常是有效的(尽管可以说没有用,或者至少不清楚),但不适用于 你的函数类型:
鉴于 (f >> g) x
等价于 g(f(x))
,当 f
是二进制时,预期结果是什么?在您的情况下,x
(int
) 部分应用于 add
(int -> int -> int
),并且该部分应用 ((int -> int)
) 被传递给 times
(也就是 int -> int -> int
),这显然需要一个 int
作为它的第一个参数,而不是函数类型 (int -> int)
.