module BatReturn:sig..end
This module defines a mechanism akin to SML's exception generators
or to a generalization of C's return, i.e. the ability to define
local labels, which may be used for immediately terminating an
expression and returning a value. By opposition to usual OCaml
exceptions, this mechanism
let find_in_array a e =
label (fun label ->
for i = 0 to Array.length a - 1 do
if Array.get a i = e then return label (Some i)
done;
None)
type 'a t
'aval label : ('a t -> 'a) -> 'alabel f creates a new label x and invokes
f x. If, during the execution of f, return x v
is invoked, the execution of f x stops
immediately and label f returns v.
Otherwise, if f x terminates normally and
returns y, label f returns y.
Calling return x v from outside scope f
is a run-time error and causes termination
of the program.
val with_label : ('a t -> 'a) -> 'alabelval return : 'a t -> 'a -> 'breturn l v returns
to the point where label l was obtained
and produces value l.
Calling return l v from outside the scope
of l (i.e. the call to function label
which produced l) is a run-time error
and causes termination of the program.