模块 Fun

module Fun: sig .. end

函数操作。


组合子

val id : 'a -> 'a

id 是恒等函数。对于任何参数 xid x 等于 x

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

const c 是一个总是返回 c 值的函数。对于任何参数 x(const c) x 等于 c

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

compose f g 是一个函数组合,先应用 g 再应用 f。对于任何参数 fgxcompose f g x 等于 f (g x)

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

flip f 反转二元函数 f 的参数顺序。对于任何参数 xy(flip f) x y 等于 f y x

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

negate p 是谓词函数 p 的否定。对于任何参数 x(negate p) x 等于 not (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 exn 是当 finally 抛出异常 exn 时由 protect ~finally work 抛出的。此异常表示意外异常或编程错误。一般来说,不应捕获 Finally_raised 异常,除非作为 catch-all 处理程序的一部分。