Module Result
Contents
Instructions: Use this module in your project
In the IDE (CLion, Visual Studio Code, Xcode, etc.) you use for your DkSDK project:
Add the following to your project's
dependencies/CMakeLists.txt
:DkSDKProject_DeclareAvailable(result CONSTRAINT "= " FINDLIBS result) DkSDKProject_MakeAvailable(result)
Add the
Findlib::result
library to any desired targets insrc/*/CMakeLists.txt
:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::result)
Click your IDE's
Build
button
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install result.null
Edit your
dune-project
and add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (result (>= ))))
Then run:
dune build *.opam # if this fails, run: dune build
Edit your
<package>.opam
file and add:depends: [ # ... existing dependencies ... "result" {>= ""} ]
Then run:
opam install . --deps-only
FINALLY, add the result
library to any desired (library)
and/or (executable)
targets in your **/dune
files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
result))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
result))
include
module
type
of
struct
include
Stdlib.Result
end
Results
type
``('a, 'e) t`` = ``(
'a
,
'e
)``
result
=
|
Ok
of
'a
|
Error
of
'e
The type for result values. Either a value Ok v
or an error Error e
.
val
ok :
'a
->
``(
'a
,
'e
)``
result
ok v
is Ok v
.
val
error :
'e
->
``(
'a
,
'e
)``
result
error e
is Error e
.
val
value : ``(
'a
,
'e
)``
result
->
``default:
'a
->
'a
value r ~default
is v
if r
is Ok v
and default
otherwise.
val
get_ok : ``(
'a
,
'e
)``
result
->
'a
get_ok r
is v
if r
is Ok v
and raise otherwise.
-
raises Invalid_argument
if
r
isError _
.
val
get_error : ``(
'a
,
'e
)``
result
->
'e
get_error r
is e
if r
is Error e
and raise otherwise.
-
raises Invalid_argument
if
r
isOk _
.
bind r f
is f v
if r
is Ok v
and r
if r
is Error _
.
join rr
is r
if rr
is Ok r
and rr
if rr
is Error _
.
map f r
is Ok (f v)
if r
is Ok v
and r
if r
is Error _
.
map_error f r
is Error (f e)
if r
is Error e
and r
if r
is
Ok _
.
val
fold : ``ok:``(
'a
->
'c
)``
->
``error:``(
'e
->
'c
)``
->
``(
'a
,
'e
)``
result
->
'c
fold ~ok ~error r
is ok v
if r
is Ok v
and error e
if r
is
Error e
.
val
iter : ``(
'a
->
unit)``
->
``(
'a
,
'e
)``
result
->
unit
iter f r
is f v
if r
is Ok v
and ()
otherwise.
val
iter_error : ``(
'e
->
unit)``
->
``(
'a
,
'e
)``
result
->
unit
iter_error f r
is f e
if r
is Error e
and ()
otherwise.
Predicates and comparisons
val
is_ok : ``(
'a
,
'e
)``
result
->
bool
is_ok r
is true
if and only if r
is Ok _
.
val
is_error : ``(
'a
,
'e
)``
result
->
bool
is_error r
is true
if and only if r
is Error _
.
val
equal : ``ok:``(
'a
->
'a
->
bool)``
->
``error:``(
'e
->
'e
->
bool)``
->
``(
'a
,
'e
)``
result
->
``(
'a
,
'e
)``
result
->
bool
equal ~ok ~error r0 r1
tests equality of r0
and r1
using ok
and
error
to respectively compare values wrapped by Ok _
and Error _
.
val
compare : ``ok:``(
'a
->
'a
->
int)``
->
``error:``(
'e
->
'e
->
int)``
->
``(
'a
,
'e
)``
result
->
``(
'a
,
'e
)``
result
->
int
compare ~ok ~error r0 r1
totally orders r0
and r1
using ok
and
error
to respectively compare values wrapped by Ok _
and Error _
.
Ok _
values are smaller than Error _
values.
Converting
val
to_option : ``(
'a
,
'e
)``
result
->
'a
option
to_option r
is r
as an option, mapping Ok v
to Some v
and
Error _
to None
.
val
to_list : ``(
'a
,
'e
)``
result
->
'a
list
to_list r
is [v]
if r
is Ok v
and []
otherwise.
val
to_seq : ``(
'a
,
'e
)``
result
->
'a
Stdlib.Seq.t
to_seq r
is r
as a sequence. Ok v
is the singleton sequence
containing v
and Error _
is the empty sequence.
type
``('a, 'b) result`` = ``(
'a
,
'b
)``
Stdlib.Result.t
=
|
Ok
of
'a
|
Error
of
'b