逆合成演算子または逆合成演算子 は(<<)
、同じ型を取り、同じ型を返す 2 つの関数を取りません。唯一の制約は、適用される最初の関数の出力型が、それが合成される関数の入力型と同じでなければならないということです。MSDN によると、関数のシグネチャは次のとおりです。
// Signature:
( << ) : ('T2 -> 'T3) -> ('T1 -> 'T2) -> 'T1 -> 'T3
// Usage:
func2 << func1
あなたが望むように動作する組み込みの合成演算子については知りませんが、このパターンがコードで頻繁に使用されるものであり、そのような演算子を使用するとコードが簡素化される場合は、独自に定義するのが合理的だと思います。例えば:
> let (<<!) func2 func1 arg = func1 arg; func2 arg;;
val ( <<! ) : func2:('a -> 'b) -> func1:('a -> unit) -> arg:'a -> 'b
または、両方の関数が を返すことがわかっている場合はunit
、次のように記述して、出力型を に制限することができますunit
。
> let (<<!) func2 func1 arg = func1 arg; func2 arg; ();;
val ( <<! ) : func2:('a -> unit) -> func1:('a -> unit) -> arg:'a -> unit