.. _stdlib_result: ===================================================== Monadic Result — a value-or-error tagged pair ===================================================== .. das:module:: result Monadic ``Result`` — a value (``ok``) or an error (``err``). Functional API for modelling fallible computations where an error carries meaning (unlike a bare ``Option`` that only says "missing"). Both the value side ``T`` and the error side ``E`` may be non-copyable (``array``, ``table``, lambdas) — constructors and combinators clone or move on the non-copyable branch via ``static_if (typeinfo can_copy(...))``. Construct via ``ok(v, type)`` / ``err(e, type)`` (clone), or ``move_ok(v, type)`` / ``move_err(e, type)`` to move out of a mutable source; compose via ``map`` / ``map_err`` / ``and_then`` / ``or_else``; extract via ``unwrap`` / ``unwrap_or`` / ``??``. Bridge to ``Option`` via ``to_option`` / ``err_to_option``. See also :ref:`tutorial_option_and_result` and ``daslib/option`` for the ``Option`` counterpart. ++++++++++ Structures ++++++++++ .. _struct-result-Result: .. das:attribute:: Result struct Result ++++++++++++ Constructors ++++++++++++ * :ref:`err (e: auto(EE); ttype: auto(TT)) : auto ` * :ref:`move_err (var e: auto(EE); ttype: auto(TT)) : auto ` * :ref:`move_ok (var v: auto(TT); etype: auto(EE)) : auto ` * :ref:`ok (v: auto(TT); etype: auto(EE)) : auto ` .. _function-result_err_autoEE_autoTT_0x4e: .. das:function:: err(e: auto(EE); ttype: auto(TT)) : auto def err (e: auto(EE); ttype: auto(TT)) : auto :Arguments: * **e** : auto(EE) * **ttype** : auto(TT) .. _function-result_move_err_autoEE_autoTT_0x5f: .. das:function:: 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) .. _function-result_move_ok_autoTT_autoEE_0x42: .. das:function:: 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) .. _function-result_ok_autoTT_autoEE_0x31: .. das:function:: ok(v: auto(TT); etype: auto(EE)) : auto def ok (v: auto(TT); etype: auto(EE)) : auto :Arguments: * **v** : auto(TT) * **etype** : auto(EE) +++++++ Queries +++++++ * :ref:`is_err (r: $Result(type\,type\)) : bool ` * :ref:`is_ok (r: $Result(type\,type\)) : bool ` .. _function-result_is_err__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: is_err(r: $Result(type,type)) : bool def is_err (r: $Result(type,type)) : bool :Arguments: * **r** : typemacro .. _function-result_is_ok__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: is_ok(r: $Result(type,type)) : bool def is_ok (r: $Result(type,type)) : bool :Arguments: * **r** : typemacro ++++++++++++ Transforming ++++++++++++ * :ref:`and_then (r: $Result(type\,type\); f: block\<(v:TT):$Result(type\,type\)\>) : auto ` * :ref:`map (r: $Result(type\,type\); f: block\<(v:TT):auto(UU)\>) : auto ` * :ref:`map_err (r: $Result(type\,type\); f: block\<(e:EE):auto(FF)\>) : auto ` * :ref:`or_else (r: $Result(type\,type\); f: block\<(e:EE):$Result(type\,type\)\>) : auto ` .. _function-result_and_then__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__block_ls_v_c_TT_c__builtin_Resulttype_ls_autoUU_gr_,type_ls_EE_gr__gr_: .. das:function:: and_then(r: $Result(type,type); f: block<(v:TT):$Result(type,type)>) : auto def and_then (r: $Result(type,type); f: block<(v:TT):$Result(type,type)>) : auto :Arguments: * **r** : typemacro * **f** : block<(v:TT):typemacro> .. _function-result_map__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__block_ls_v_c_TT_c_autoUU_gr_: .. das:function:: map(r: $Result(type,type); f: block<(v:TT):auto(UU)>) : auto def map (r: $Result(type,type); f: block<(v:TT):auto(UU)>) : auto :Arguments: * **r** : typemacro * **f** : block<(v:TT):auto(UU)> .. _function-result_map_err__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__block_ls_e_c_EE_c_autoFF_gr_: .. das:function:: map_err(r: $Result(type,type); f: block<(e:EE):auto(FF)>) : auto def map_err (r: $Result(type,type); f: block<(e:EE):auto(FF)>) : auto :Arguments: * **r** : typemacro * **f** : block<(e:EE):auto(FF)> .. _function-result_or_else__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__block_ls_e_c_EE_c__builtin_Resulttype_ls_TT_gr_,type_ls_autoFF_gr__gr_: .. das:function:: or_else(r: $Result(type,type); f: block<(e:EE):$Result(type,type)>) : auto def or_else (r: $Result(type,type); f: block<(e:EE):$Result(type,type)>) : auto :Arguments: * **r** : typemacro * **f** : block<(e:EE):typemacro> ++++++++++ Extraction ++++++++++ * :ref:`expect_err (r: $Result(type\,type\); msg: string) : EE ` * :ref:`expect_value (r: $Result(type\,type\); msg: string) : TT ` * :ref:`move_unwrap (var r: $Result(type\,type\)) : TT ` * :ref:`move_unwrap_err (var r: $Result(type\,type\)) : EE ` * :ref:`unwrap (r: $Result(type\,type\)) : TT ` * :ref:`unwrap_err (r: $Result(type\,type\)) : EE ` * :ref:`unwrap_or (r: $Result(type\,type\); d: TT) : TT ` * :ref:`unwrap_or_default (r: $Result(type\,type\)) : TT ` * :ref:`unwrap_or_else (r: $Result(type\,type\); f: block\<(e:EE):TT\>) : TT ` .. _function-result_expect_err__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__string: .. das:function:: expect_err(r: $Result(type,type); msg: string) : EE def expect_err (r: $Result(type,type); msg: string) : EE :Arguments: * **r** : typemacro * **msg** : string .. _function-result_expect_value__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__string: .. das:function:: expect_value(r: $Result(type,type); msg: string) : TT def expect_value (r: $Result(type,type); msg: string) : TT :Arguments: * **r** : typemacro * **msg** : string .. _function-result_move_unwrap__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: move_unwrap(r: $Result(type,type)) : TT def move_unwrap (var r: $Result(type,type)) : TT :Arguments: * **r** : typemacro .. _function-result_move_unwrap_err__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: move_unwrap_err(r: $Result(type,type)) : EE def move_unwrap_err (var r: $Result(type,type)) : EE :Arguments: * **r** : typemacro .. _function-result_unwrap__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: unwrap(r: $Result(type,type)) : TT def unwrap (r: $Result(type,type)) : TT :Arguments: * **r** : typemacro .. _function-result_unwrap_err__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: unwrap_err(r: $Result(type,type)) : EE def unwrap_err (r: $Result(type,type)) : EE :Arguments: * **r** : typemacro .. _function-result_unwrap_or__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__TT: .. das:function:: unwrap_or(r: $Result(type,type); d: TT) : TT def unwrap_or (r: $Result(type,type); d: TT) : TT :Arguments: * **r** : typemacro * **d** : TT .. _function-result_unwrap_or_default__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: unwrap_or_default(r: $Result(type,type)) : TT def unwrap_or_default (r: $Result(type,type)) : TT :Arguments: * **r** : typemacro .. _function-result_unwrap_or_else__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__block_ls_e_c_EE_c_TT_gr_: .. das:function:: unwrap_or_else(r: $Result(type,type); f: block<(e:EE):TT>) : TT def unwrap_or_else (r: $Result(type,type); f: block<(e:EE):TT>) : TT :Arguments: * **r** : typemacro * **f** : block<(e:EE):TT> ++++++++++++ Side effects ++++++++++++ * :ref:`if_err (r: $Result(type\,type\); f: block\<(e:EE):void\>) ` * :ref:`if_ok (r: $Result(type\,type\); f: block\<(v:TT):void\>) ` .. _function-result_if_err__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__block_ls_e_c_EE_c_void_gr_: .. das:function:: if_err(r: $Result(type,type); f: block<(e:EE):void>) def if_err (r: $Result(type,type); f: block<(e:EE):void>) :Arguments: * **r** : typemacro * **f** : block<(e:EE):void> .. _function-result_if_ok__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__block_ls_v_c_TT_c_void_gr_: .. das:function:: if_ok(r: $Result(type,type); f: block<(v:TT):void>) def if_ok (r: $Result(type,type); f: block<(v:TT):void>) :Arguments: * **r** : typemacro * **f** : block<(v:TT):void> +++++++++++++++++ Bridges to Option +++++++++++++++++ * :ref:`err_to_option (r: $Result(type\,type\)) : auto ` * :ref:`to_option (r: $Result(type\,type\)) : auto ` .. _function-result_err_to_option__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: err_to_option(r: $Result(type,type)) : auto def err_to_option (r: $Result(type,type)) : auto :Arguments: * **r** : typemacro .. _function-result_to_option__builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: to_option(r: $Result(type,type)) : auto def to_option (r: $Result(type,type)) : auto :Arguments: * **r** : typemacro +++++++++ Operators +++++++++ * :ref:`$Result(type\,type\)\!= (r: $Result(type\,type\); v: TT) : bool ` * :ref:`$Result(type\,type\)== (a: $Result(type\,type\); b: $Result(type\,type\)) : bool ` * :ref:`$Result(type\,type\)== (r: $Result(type\,type\); v: TT) : bool ` * :ref:`$Result(type\,type\)?? (r: $Result(type\,type\); d: TT) : TT ` * :ref:`auto(TT)\!= (v: auto(TT); r: $Result(type\,type\)) : bool ` * :ref:`auto(TT)== (v: auto(TT); r: $Result(type\,type\)) : bool ` .. _function-result__ex__eq___builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__TT: .. das:function:: $Result(type,type)!=(r: $Result(type,type); v: TT) : bool def $Result(type,type)!= (r: $Result(type,type); v: TT) : bool :Arguments: * **r** : typemacro * **v** : TT $Result(type,type)== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _function-result__eq__eq___builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr___builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr_: .. das:function:: $Result(type,type)==(a: $Result(type,type); b: $Result(type,type)) : bool def $Result(type,type)== (a: $Result(type,type); b: $Result(type,type)) : bool :Arguments: * **a** : typemacro implicit * **b** : typemacro implicit .. _function-result__eq__eq___builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__TT: .. das:function:: $Result(type,type)==(r: $Result(type,type); v: TT) : bool ---- .. _function-result__q__q___builtin_Resulttype_ls_autoTT_gr_,type_ls_autoEE_gr__TT: .. das:function:: $Result(type,type)??(r: $Result(type,type); d: TT) : TT def $Result(type,type)?? (r: $Result(type,type); d: TT) : TT :Arguments: * **r** : typemacro * **d** : TT .. _function-result__ex__eq__autoTT__builtin_Resulttype_ls_TT_gr_,type_ls_autoEE_gr__0x15f: .. das:function:: auto(TT)!=(v: auto(TT); r: $Result(type,type)) : bool def auto(TT)!= (v: auto(TT); r: $Result(type,type)) : bool :Arguments: * **v** : auto(TT) * **r** : typemacro .. _function-result__eq__eq__autoTT__builtin_Resulttype_ls_TT_gr_,type_ls_autoEE_gr__0x157: .. das:function:: auto(TT)==(v: auto(TT); r: $Result(type,type)) : bool def auto(TT)== (v: auto(TT); r: $Result(type,type)) : bool :Arguments: * **v** : auto(TT) * **r** : typemacro