模組 Stdlib.Fun

module Fun: Fun

組合器

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 例外,除非作為全域捕獲處理常式的一部分。