Что мне не хватает: возможна ли композиция функций с несколькими аргументами?

Я понимаю основы композиции функций в F #, как, например, описано здесь .

Может быть, я хотя чего-то не хватает. Операторы >> и , похоже, были определены с предположением, что каждая функция принимает только один аргумент:

> (>>);;
val it : (('a -> 'b) -> ('b -> 'c) -> 'a -> 'c) = 
> (<<);;
val it : (('a -> 'b) -> ('c -> 'a) -> 'c -> 'b) = 

Однако я хотел бы сделать что-то вроде следующего:

let add a b = a + b
let double c = 2*c
let addAndDouble = add >> double   // bad!

Но даже несмотря на то, что вывод add имеет тип, требуемый для ввода double , он отклоняется.

Я знаю, что могу переписать добавить с одним аргументом кортежа:

let add (a,b) = a + b

Или я могу написать новый оператор для каждого числа возможных аргументов первой функции:

let inline (>>+) f g x y = g (f x y)
let doubleAdd = add >>+ double

Но это кажется глупым! Есть ли лучший способ, который я пропустил?

10
задан Kevin Cantu 26 March 2011 в 23:45
поделиться