5.8. Monadic Result<T, E> — a value-or-error tagged pair
Monadic Result<T, E> — a value (ok) or an error (err).
Functional API for modelling fallible computations where an error carries
meaning (unlike a bare Option<T> that only says “missing”).
Both the value side T and the error side E may be non-copyable
(array<T>, table<K;V>, lambdas) — constructors and combinators clone
or move on the non-copyable branch via static_if (typeinfo can_copy(...)).
Construct via ok(v, type<E>) / err(e, type<T>) (clone), or
move_ok(v, type<E>) / move_err(e, type<T>) to move out of a mutable
source; compose via map / map_err / and_then / or_else;
extract via unwrap / unwrap_or / ??. Bridge to Option<T> via
to_option / err_to_option.
See also Option<T> and Result<T, E> and daslib/option for the
Option<T> counterpart.
5.8.1. Structures
- Result
struct Result
5.8.2. Constructors
- err(e: auto(EE); ttype: auto(TT)): auto
def err (e: auto(EE); ttype: auto(TT)) : auto
- Arguments:
e : auto(EE)
ttype : auto(TT)
- move_err(e: auto(EE); ttype: auto(TT)): auto
def move_err (var e: auto(EE); ttype: auto(TT)) : auto
- Arguments:
e : auto(EE)
ttype : auto(TT)
- move_ok(v: auto(TT); etype: auto(EE)): auto
def move_ok (var v: auto(TT); etype: auto(EE)) : auto
- Arguments:
v : auto(TT)
etype : auto(EE)
- ok(v: auto(TT); etype: auto(EE)): auto
def ok (v: auto(TT); etype: auto(EE)) : auto
- Arguments:
v : auto(TT)
etype : auto(EE)
5.8.3. Queries
- is_err(r: $Result(type<auto(TT)>, type<auto(EE)>)): bool
def is_err (r: $Result(type<auto(TT)>,type<auto(EE)>)) : bool
- Arguments:
r : typemacro
- is_ok(r: $Result(type<auto(TT)>, type<auto(EE)>)): bool
def is_ok (r: $Result(type<auto(TT)>,type<auto(EE)>)) : bool
- Arguments:
r : typemacro
5.8.4. Transforming
- and_then(r: $Result(type<auto(TT)>, type<auto(EE)>); f: block<(v:TT):$Result(type<auto(UU)>, type<EE>)>): auto
def and_then (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(v:TT):$Result(type<auto(UU)>,type<EE>)>) : auto
- Arguments:
r : typemacro
f : block<(v:TT):typemacro>
- map(r: $Result(type<auto(TT)>, type<auto(EE)>); f: block<(v:TT):auto(UU)>): auto
def map (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(v:TT):auto(UU)>) : auto
- Arguments:
r : typemacro
f : block<(v:TT):auto(UU)>
- map_err(r: $Result(type<auto(TT)>, type<auto(EE)>); f: block<(e:EE):auto(FF)>): auto
def map_err (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(e:EE):auto(FF)>) : auto
- Arguments:
r : typemacro
f : block<(e:EE):auto(FF)>
- or_else(r: $Result(type<auto(TT)>, type<auto(EE)>); f: block<(e:EE):$Result(type<TT>, type<auto(FF)>)>): auto
def or_else (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(e:EE):$Result(type<TT>,type<auto(FF)>)>) : auto
- Arguments:
r : typemacro
f : block<(e:EE):typemacro>
5.8.5. Extraction
expect_err (r: $Result(type<auto(TT)>,type<auto(EE)>); msg: string) : EE
expect_value (r: $Result(type<auto(TT)>,type<auto(EE)>); msg: string) : TT
move_unwrap (var r: $Result(type<auto(TT)>,type<auto(EE)>)) : TT
move_unwrap_err (var r: $Result(type<auto(TT)>,type<auto(EE)>)) : EE
unwrap_or (r: $Result(type<auto(TT)>,type<auto(EE)>); d: TT) : TT
unwrap_or_default (r: $Result(type<auto(TT)>,type<auto(EE)>)) : TT
unwrap_or_else (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(e:EE):TT>) : TT
- expect_err(r: $Result(type<auto(TT)>, type<auto(EE)>); msg: string): EE
def expect_err (r: $Result(type<auto(TT)>,type<auto(EE)>); msg: string) : EE
- Arguments:
r : typemacro
msg : string
- expect_value(r: $Result(type<auto(TT)>, type<auto(EE)>); msg: string): TT
def expect_value (r: $Result(type<auto(TT)>,type<auto(EE)>); msg: string) : TT
- Arguments:
r : typemacro
msg : string
- move_unwrap(r: $Result(type<auto(TT)>, type<auto(EE)>)): TT
def move_unwrap (var r: $Result(type<auto(TT)>,type<auto(EE)>)) : TT
- Arguments:
r : typemacro
- move_unwrap_err(r: $Result(type<auto(TT)>, type<auto(EE)>)): EE
def move_unwrap_err (var r: $Result(type<auto(TT)>,type<auto(EE)>)) : EE
- Arguments:
r : typemacro
- unwrap(r: $Result(type<auto(TT)>, type<auto(EE)>)): TT
def unwrap (r: $Result(type<auto(TT)>,type<auto(EE)>)) : TT
- Arguments:
r : typemacro
- unwrap_err(r: $Result(type<auto(TT)>, type<auto(EE)>)): EE
def unwrap_err (r: $Result(type<auto(TT)>,type<auto(EE)>)) : EE
- Arguments:
r : typemacro
- unwrap_or(r: $Result(type<auto(TT)>, type<auto(EE)>); d: TT): TT
def unwrap_or (r: $Result(type<auto(TT)>,type<auto(EE)>); d: TT) : TT
- Arguments:
r : typemacro
d : TT
- unwrap_or_default(r: $Result(type<auto(TT)>, type<auto(EE)>)): TT
def unwrap_or_default (r: $Result(type<auto(TT)>,type<auto(EE)>)) : TT
- Arguments:
r : typemacro
- unwrap_or_else(r: $Result(type<auto(TT)>, type<auto(EE)>); f: block<(e:EE):TT>): TT
def unwrap_or_else (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(e:EE):TT>) : TT
- Arguments:
r : typemacro
f : block<(e:EE):TT>
5.8.6. Side effects
- if_err(r: $Result(type<auto(TT)>, type<auto(EE)>); f: block<(e:EE):void>)
def if_err (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(e:EE):void>)
- Arguments:
r : typemacro
f : block<(e:EE):void>
- if_ok(r: $Result(type<auto(TT)>, type<auto(EE)>); f: block<(v:TT):void>)
def if_ok (r: $Result(type<auto(TT)>,type<auto(EE)>); f: block<(v:TT):void>)
- Arguments:
r : typemacro
f : block<(v:TT):void>
5.8.7. Bridges to Option
- err_to_option(r: $Result(type<auto(TT)>, type<auto(EE)>)): auto
def err_to_option (r: $Result(type<auto(TT)>,type<auto(EE)>)) : auto
- Arguments:
r : typemacro
- to_option(r: $Result(type<auto(TT)>, type<auto(EE)>)): auto
def to_option (r: $Result(type<auto(TT)>,type<auto(EE)>)) : auto
- Arguments:
r : typemacro
5.8.8. Operators
$Result(type<auto(TT)>,type<auto(EE)>)!= (r: $Result(type<auto(TT)>,type<auto(EE)>); v: TT) : bool
$Result(type<auto(TT)>,type<auto(EE)>)== (r: $Result(type<auto(TT)>,type<auto(EE)>); v: TT) : bool
$Result(type<auto(TT)>,type<auto(EE)>)?? (r: $Result(type<auto(TT)>,type<auto(EE)>); d: TT) : TT
auto(TT)!= (v: auto(TT); r: $Result(type<TT>,type<auto(EE)>)) : bool
auto(TT)== (v: auto(TT); r: $Result(type<TT>,type<auto(EE)>)) : bool
- $Result(type<auto(TT)>,type<auto(EE)>)!=(r: $Result(type<auto(TT)>, type<auto(EE)>); v: TT): bool
def $Result(type<auto(TT)>,type<auto(EE)>)!= (r: $Result(type<auto(TT)>,type<auto(EE)>); v: TT) : bool
- Arguments:
r : typemacro
v : TT
5.8.8.1. $Result(type<auto(TT)>,type<auto(EE)>)==
- $Result(type<auto(TT)>,type<auto(EE)>)==(a: $Result(type<auto(TT)>, type<auto(EE)>); b: $Result(type<auto(TT)>, type<auto(EE)>)): bool
def $Result(type<auto(TT)>,type<auto(EE)>)== (a: $Result(type<auto(TT)>,type<auto(EE)>); b: $Result(type<auto(TT)>,type<auto(EE)>)) : bool
- Arguments:
a : typemacro implicit
b : typemacro implicit
- $Result(type<auto(TT)>,type<auto(EE)>)==(r: $Result(type<auto(TT)>, type<auto(EE)>); v: TT): bool
- $Result(type<auto(TT)>,type<auto(EE)>)??(r: $Result(type<auto(TT)>, type<auto(EE)>); d: TT): TT
def $Result(type<auto(TT)>,type<auto(EE)>)?? (r: $Result(type<auto(TT)>,type<auto(EE)>); d: TT) : TT
- Arguments:
r : typemacro
d : TT
- auto(TT)!=(v: auto(TT); r: $Result(type<TT>, type<auto(EE)>)): bool
def auto(TT)!= (v: auto(TT); r: $Result(type<TT>,type<auto(EE)>)) : bool
- Arguments:
v : auto(TT)
r : typemacro
- auto(TT)==(v: auto(TT); r: $Result(type<TT>, type<auto(EE)>)): bool
def auto(TT)== (v: auto(TT); r: $Result(type<TT>,type<auto(EE)>)) : bool
- Arguments:
v : auto(TT)
r : typemacro