module Fun:sig..end
函数操作。
val id : 'a -> 'aid 是恒等函数。对于任何参数 x,id x 等于 x。
val const : 'a -> 'b -> 'aconst c 是一个总是返回 c 值的函数。对于任何参数 x,(const c) x 等于 c。
val compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'ccompose f g 是一个函数组合,先应用 g 再应用 f。对于任何参数 f、g 和 x,compose f g x 等于 f (g x)。
val flip : ('a -> 'b -> 'c) -> 'b -> 'a -> 'cflip f 反转二元函数 f 的参数顺序。对于任何参数 x 和 y,(flip f) x y 等于 f y x。
val negate : ('a -> bool) -> 'a -> boolnegate p 是谓词函数 p 的否定。对于任何参数 x,(negate p) x 等于 not (p x)。
val protect : finally:(unit -> unit) -> (unit -> 'a) -> 'aprotect ~finally work 调用 work (),然后在 work () 返回其值或异常之前调用 finally ()。在后一种情况下,异常在 finally () 之后重新抛出。如果 finally () 抛出异常,则改为抛出 Fun.Finally_raised 异常。
protect 可用于强制执行局部不变量,无论 work () 是否正常返回或抛出异常。但是,它无法防止 finally () 内部抛出的意外异常,例如 Out_of_memory、Stack_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 处理程序的一部分。