b -> (a -> b -> c) -> c"应用两个参数是标准函数概念吗?-6ren"> b -> (a -> b -> c) -> c"应用两个参数是标准函数概念吗?-我发现需要一个带有签名 'a -> 'b -> ('a -> 'b -> 'c) -> 'c 的函数来应用两个管道传输时的参数: let apply2 x y f = f x y 我需要这个,因为-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:48:11 25 4
gpt4 key购买 nike

我发现需要一个带有签名 '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 符合要求,但我无法摆脱这样的感觉:我可以使用内置函数或运算符,或者我缺少一些更基本的方法来执行此操作(除了 lambdas,恕我直言,在这种情况下读起来更糟)。请注意,我无法轻松切换 myFun 的参数顺序(它是一个 Giraffe HttpHandler,因此最后两个参数必须是 HttpFuncHttpContext,由上面的TypeATypeB指定)。

具有我所描述的签名的 apply2 函数是否适合在函数式编程中使用,或者我是否遗漏了一些明显的东西?如果这是一个众所周知的概念,是否有更好的名称?

最佳答案

在我看来,如果使用 let 绑定(bind)中间值,代码会更清晰。

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

关于f# - "a -> b -> (a -> b -> c) -> c"应用两个参数是标准函数概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50148135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com