"a -> b -> (a -> b -> c) -> c" 应用两个参数是一个标准的功能概念吗?
Is "a -> b -> (a -> b -> c) -> c" to apply two parameters a standard functional concept?
我发现需要一个带有签名 'a -> 'b -> ('a -> 'b -> 'c) -> 'c
的函数,用于在管道传输时应用两个参数:
let apply2 x y f =
f x y
我需要这个因为我正在使用一个函数
myFun : MyType -> TypeA -> TypeB -> ResultType
我在另一个函数中使用它,如下所示:
let useCase someValue (valueA: TypeA) (valueB: TypeB) =
someValue
|> ...
|> toMyType
|> myFun
|> apply2 valueA valueB
apply2
符合要求,但我无法摆脱这样一种感觉,即我可以使用内置函数或运算符,或者我缺少一些更基本的方法(除了 lambda,它恕我直言,在这种情况下读起来更糟)。请注意,我不能轻易切换 myFun
的参数顺序(它是长颈鹿 HttpHandler
,所以最后两个参数必须是 HttpFunc
和 HttpContext
,由 TypeA
和 TypeB
以上)。
具有我描述的签名的 apply2
函数是否适合在函数式编程中使用,还是我遗漏了一些明显的东西?如果这是一个众所周知的概念,它有更好的名字吗?
在我看来,如果将中间值与 let
绑定,代码会更清晰。
let useCase someValue (valueA: TypeA) (valueB: TypeB) =
let myValue =
someValue
|> ...
|> toMyType
myFun myValue valueA valueB
你也可以像下面这样使用反向管道
let useCase someValue (valueA: TypeA) (valueB: TypeB) =
someValue
|> ...
|> toMyType
|> myFun <| valueA <| valueB
你可以在这里使用一些小技巧:
let useCase someValue ((valueA, valueB) as tuple) =
someValue
|> ...
|> toMyType
|> myFun
<|| tuple
或
let useCase someValue tuple =
...
在你的管道中,你可以替换:
|> apply2 valueA valueB
与
|> (||>) (valueA, valueA)
因此 ||>
与您的 apply2
函数相同,但具有元组参数。
我发现需要一个带有签名 'a -> 'b -> ('a -> 'b -> 'c) -> 'c
的函数,用于在管道传输时应用两个参数:
let apply2 x y f =
f x y
我需要这个因为我正在使用一个函数
myFun : MyType -> TypeA -> TypeB -> ResultType
我在另一个函数中使用它,如下所示:
let useCase someValue (valueA: TypeA) (valueB: TypeB) =
someValue
|> ...
|> toMyType
|> myFun
|> apply2 valueA valueB
apply2
符合要求,但我无法摆脱这样一种感觉,即我可以使用内置函数或运算符,或者我缺少一些更基本的方法(除了 lambda,它恕我直言,在这种情况下读起来更糟)。请注意,我不能轻易切换 myFun
的参数顺序(它是长颈鹿 HttpHandler
,所以最后两个参数必须是 HttpFunc
和 HttpContext
,由 TypeA
和 TypeB
以上)。
具有我描述的签名的 apply2
函数是否适合在函数式编程中使用,还是我遗漏了一些明显的东西?如果这是一个众所周知的概念,它有更好的名字吗?
在我看来,如果将中间值与 let
绑定,代码会更清晰。
let useCase someValue (valueA: TypeA) (valueB: TypeB) =
let myValue =
someValue
|> ...
|> toMyType
myFun myValue valueA valueB
你也可以像下面这样使用反向管道
let useCase someValue (valueA: TypeA) (valueB: TypeB) =
someValue
|> ...
|> toMyType
|> myFun <| valueA <| valueB
你可以在这里使用一些小技巧:
let useCase someValue ((valueA, valueB) as tuple) =
someValue
|> ...
|> toMyType
|> myFun
<|| tuple
或
let useCase someValue tuple =
...
在你的管道中,你可以替换:
|> apply2 valueA valueB
与
|> (||>) (valueA, valueA)
因此 ||>
与您的 apply2
函数相同,但具有元组参数。