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:

  1. Add the following to your project's dependencies/CMakeLists.txt:

    Copy
    DkSDKProject_DeclareAvailable(result
        CONSTRAINT "= "
        FINDLIBS result)
    DkSDKProject_MakeAvailable(result)
  2. Add the Findlib::result library to any desired targets in src/*/CMakeLists.txt:

    Copy
    target_link_libraries(YourPackage_YourLibraryName
         # ... existing libraries, if any ...
         Findlib::result)
  3. Click your IDE's Build button

Not using DkSDK?

FIRST, do one or all of the following:

  1. Run:

    Copy
    opam install result.null
  2. Edit your dune-project and add:

    Copy
    (package
      (name YourExistingPackage)
      (depends
      ; ... existing dependenices ...
      (result (>= ))))

    Then run:

    Copy
    dune build *.opam # if this fails, run: dune build
  3. Edit your <package>.opam file and add:

    Copy
    depends: [
      # ... existing dependencies ...
      "result" {>= ""}
    ]

    Then run:

    Copy
    opam install . --deps-only

FINALLY, add the result library to any desired (library)and/or (executable) targets in your **/dune files:

Copy
(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.

valok :'a -> ``('a, 'e)`` result

ok v is Ok v.

valerror :'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 is Error _.

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 is Ok _.

val bind : ``('a, 'e)`` result -> ``('a -> ``('b, 'e)`` result)`` -> ``('b, 'e)`` result

bind r f is f v if r is Ok v and r if r is Error _.

val join : ``(``('a, 'e)`` result, 'e)`` result -> ``('a, 'e)`` result

join rr is r if rr is Ok r and rr if rr is Error _.

val map : ``('a -> 'b)`` -> ``('a, 'e)`` result -> ``('b, 'e)`` result

map f r is Ok (f v) if r is Ok v and r if r is Error _.

val map_error : ``('e -> 'f)`` -> ``('a, 'e)`` result -> ``('a, 'f)`` result

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