Модуль Fun
module Fun: sig .. end
Обработка функций.
- Since 4.08
Комбинаторы
val id : 'a -> 'a
id — это функция-тождество. Для любого аргумента x, id x равно x.
val const : 'a -> 'b -> 'a
const c — это функция, которая всегда возвращает значение c. Для любого аргумента x, (const c) x равно c.
val flip : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c
flip f меняет порядок аргументов бинарной функции f. Для любых аргументов x и y, (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 () и затем finally () перед тем как work () вернёт своё значение или исключение. В последнем случае исключение повторно поднимается после finally (). Если finally () поднимает исключение, тогда поднимается исключение Fun.Finally_raised вместо него.
protect можно использовать для обеспечения локальных инвариантов, вне зависимости от того, work () возвращается нормально или поднимает исключение. Однако это не защищает от неожиданных исключений, поднимаемых внутри finally (), таких как Out_of_memory, Stack_overflow или асинхронных исключений, поднятых обработчиками сигналов (например, Sys.Break).
Примечание: это программная ошибка, если другие типы исключений поднимаются finally, так как любое исключение, поднятое в work (), будет потеряно в случае исключения Fun.Finally_raised. Поэтому следует обрабатывать их внутри finally.
exception Finally_raised of exn
Finally_raised exn поднимается protect ~finally work когда finally поднимает исключение exn. Это исключение обозначает либо непредвиденное исключение, либо программную ошибку. Как правило, не следует ловить исключение Finally_raised за исключением обработки всех исключений.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Fun.html