是"a - > b - >(a - > b - > c) - > c"应用两个参数标准功能概念吗?

cme*_*ren 2 f# functional-programming pipeline partial-application pipelining

我遇到了一个带签名的函数的需要,用于'a -> 'b -> ('a -> 'b -> 'c) -> 'c在管道时应用两个参数:

let apply2 x y f =
  f x y
Run Code Online (Sandbox Code Playgroud)

我需要这个因为我正在使用一个函数

myFun : MyType -> TypeA -> TypeB -> ResultType
Run Code Online (Sandbox Code Playgroud)

我在另一个函数中使用它:

let useCase someValue (valueA: TypeA) (valueB: TypeB) =
  someValue
  |> ...
  |> toMyType
  |> myFun
  |> apply2 valueA valueB
Run Code Online (Sandbox Code Playgroud)

apply2符合条件,但我不能动摇我可以使用内置函数或运算符的感觉,或者我错过了一些更基本的方法(禁止使用lambda,在这种情况下恕我直言的内容更糟).请注意,我不能轻易切换的参数顺序myFun(这是一个长颈鹿HttpHandler,所以最后两个参数必须HttpFuncHttpContext,由指定的TypeATypeB以上).

apply2具有签名的函数我已经描述了在函数式编程中使用的公平的东西,还是我错过了一些明显的东西?如果这是一个众所周知的概念,它有更好的名字吗?

hve*_*ter 5

在我看来,如果你用中间值绑定代码会更清晰let.

let useCase someValue (valueA: TypeA) (valueB: TypeB) =
    let myValue =
        someValue
        |> ...
        |> toMyType
    myFun myValue valueA valueB
Run Code Online (Sandbox Code Playgroud)

您也可以按如下方式使用反向管道

let useCase someValue (valueA: TypeA) (valueB: TypeB) =
    someValue
    |> ...
    |> toMyType
    |> myFun <| valueA <| valueB
Run Code Online (Sandbox Code Playgroud)