組合運算子

兩個有用的高階函式是二進位制應用程式@@)和反向應用程式管道|>)運算子。雖然從 4.01 開始它們可以作為基元使用,但在這裡定義它們仍然是有益的:

let (|>) x f = f x
let (@@) f x = f x

考慮增加 3 的平方的問題。表達該計算的一種方法是:

(* 1 -- Using parentheses *)
succ (square 3)
(* - : int = 10 *)

(* where `square` is defined as: *)
let square x = x * x

請注意,我們不能簡單地做 succ square 3 因為(由於左關聯性 )會減少到毫無意義的 (succ square) 3。使用應用程式(@@)我們可以表示沒有括號:

(* 2 -- Using the application operator *)
succ @@ square 3
(* - : int = 10 *)

注意最後一個要執行的操作(即 succ)是如何在表示式中首先出現的?該反應用運算子(|>)允許我們,唉,反轉這個:

(* 3 -- Using the reverse-application operator *)
3 |> square |> succ
(* - : int = 10 *)

數字 3 現在通過 square 然後 succ管道,而不是應用於 square 以產生應用 succ 的結果。