ここで説明されているように、F# での関数合成の基本を理解しています。
たぶん、私は何かを見逃しています。>>
and<<
演算子は、各関数が 1 つの引数しかとらないという前提で定義されているようです。
> (>>);;
val it : (('a -> 'b) -> ('b -> 'c) -> 'a -> 'c) = <fun:it@214-13>
> (<<);;
val it : (('a -> 'b) -> ('c -> 'a) -> 'c -> 'b) = <fun:it@215-14>
ただし、私がやりたいことは、次のようなものです。
let add a b = a + b
let double c = 2*c
let addAndDouble = add >> double // bad!
しかし、add
の出力がdouble
の入力に必要なタイプであっても、それは拒否されます。
add を 1 つのタプル引数で書き直すことができることはわかっています。
let add (a,b) = a + b
または、最初の関数に可能な引数の数ごとに新しい演算子を書くことができます。
let inline (>>+) f g x y = g (f x y)
let doubleAdd = add >>+ double
しかし、それはばかげているようです!私が見逃したより良い方法はありますか?