F# 返回元组的链接函数

Soo*_*Guy 2 f#

我是 F# 新手,正在尝试链接函数来创建高阶函数。

一个简化的例子是

init返回一个元组

validate接受一个元组并返回bool

    let init : string * string =
        ("1", "2")

    let validate ((a: string), (b: string)) : bool =
        a.Equals(b)

    let test = init >> validate
Run Code Online (Sandbox Code Playgroud)

错误

This expression was expected to have type 'a -> 'b' but here has type 'string * string'

Tom*_*cek 5

正如 Piotr 的答案所解释的那样,您会收到错误,因为您有一个值和一个函数。要组合它们,您可以将其转换init为函数,但在这种情况下您实际上并不需要使用组合。

如果您想将值作为参数传递给函数,通常将其作为参数传递要简单得多:

let res = validate init
Run Code Online (Sandbox Code Playgroud)

或者,如果您想按顺序将多个函数应用于输入,则可以使用管道运算符来执行此操作:

let res = init |> validate
Run Code Online (Sandbox Code Playgroud)

使用函数组合>>是一个很好的函数技巧,但我认为它在标准 F# 代码中实际上比大多数人想象的要少得多。我|>一直使用,但>>很少使用。