使用List.map部分应用元组函数



给定一个接受两个参数的函数:

let f (a:int) (b:int) : string = sprintf "%d %d" a b

元组列表:

let myList = [(1,2) ; (3,3)]

如何使用映射部分应用元组运算符(||>)

myList |> List.map ((||>) f)            //doesn't work
myList |> List.map (fun x -> (||>) x f) //boring

我似乎需要推翻||>所需要的论点。

myList |> List.map ((<||) f)

好吧,像@desco那样使用(<||)是最短的答案。使用uncurry:,您可以轻松地以无点风格进行书写

let inline uncurry f (x, y) = f x y
myList |> List.map (uncurry f)

或者更奇怪的内置功能:

myList |> List.map ((|>) f << (||>))

证明:

(|>) f << (||>)
<=> fun x -> ((|>) f << (||>)) x
<=> fun x -> ((|>) f) ((||>) x)
<=> fun x -> (|>) f ((||>) x)
<=> fun x -> f |> ((||>) x)
<=> fun x -> (||>) x f

最新更新