模組 Fun

module Fun: sig .. end

函式操作。


組合器

val id : 'a -> 'a

id 是恆等函式。對於任何參數 xid xx

val const : 'a -> 'b -> 'a

const c 是一個永遠返回數值 c 的函式。對於任何參數 x(const c) xc

val compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c

compose f g 是先套用 g 再套用 f 的函式組合。對於任何參數 fgxcompose f g xf (g x)

val flip : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c

flip f 反轉二元函式 f 的參數順序。對於任何參數 xy(flip f) x yf y x

val negate : ('a -> bool) -> 'a -> bool

negate p 是謂詞函式 p 的否定。對於任何參數 x(negate p) xnot (p x)

例外處理

val protect : finally:(unit -> unit) -> (unit -> 'a) -> 'a

protect ~finally work 會呼叫 work (),然後在 work () 返回其值或例外之前呼叫 finally ()。在後一種情況下,例外會在 finally () 之後重新拋出。如果 finally () 拋出例外,則會改為拋出例外 Fun.Finally_raised

protect 可用於強制執行局部不變性,無論 work () 正常返回還是拋出例外。但是,它不能防止在 finally () 內部拋出的意外例外,例如 Out_of_memoryStack_overflow 或由信號處理程序拋出的非同步例外(例如 Sys.Break)。

注意:如果 finally 拋出其他類型的例外,則為*程式設計錯誤*,因為在發生 Fun.Finally_raised 例外時,work () 中拋出的任何例外都會遺失。因此,應確保在 finally 內部處理這些例外。

exception Finally_raised of exn

Finally_raised exnfinally 拋出例外 exn 時,由 protect ~finally work 拋出。此例外表示意外例外或程式設計錯誤。一般來說,除了作為全域捕獲處理的一部分外,不應捕獲 Finally_raised 例外。