monex v0.1.6 MonEx.Result

Result module provides Result type with utility functions.

Summary

Types

t()

Result type. ok(x) or error(err) unwraps into {:ok, x} or {:error, err}

Functions

Filters collection of results, leaving only errors:

[ok(1), error("oops")] |> collect_error == [error("oops")]

Filters collection of results, leaving only ok’s

[ok(1), error("oops")] |> collect_ok == [ok(1)]

Returns monad if it is ok(), or evaluates supplied lambda that expected to return another result. Returns supplied fallback value, if it’s not a function.

ok(5) |> fallback(fn _ -> 1 end) == ok(5)
error("WTF") |> fallback(fn m -> ok("#{m}LOL") end) == ok("WTFLOL")
error("WTF") |> fallback(ok(5)) == ok(5)

Returns true if argument is error(), false if ok()

is_error(error("Error")) == true

Returns true if argument is ok(), false if error()

is_ok(ok(5)) == true

Returns value x if argument is ok(x), raises e if error(e)

5 == unwrap(ok(5))

Types

t()
t() :: {:ok, term} | {:error, term}

Result type. ok(x) or error(err) unwraps into {:ok, x} or {:error, err}

Functions

collect_error(results)
collect_error([t]) :: [term]

Filters collection of results, leaving only errors:

[ok(1), error("oops")] |> collect_error == [error("oops")]
collect_ok(results)
collect_ok([t]) :: [term]

Filters collection of results, leaving only ok’s

[ok(1), error("oops")] |> collect_ok == [ok(1)]
fallback(arg, f)
fallback(t, t | (term -> t)) :: t

Returns monad if it is ok(), or evaluates supplied lambda that expected to return another result. Returns supplied fallback value, if it’s not a function.

ok(5) |> fallback(fn _ -> 1 end) == ok(5)
error("WTF") |> fallback(fn m -> ok("#{m}LOL") end) == ok("WTFLOL")
error("WTF") |> fallback(ok(5)) == ok(5)
is_error(x)
is_error(t) :: boolean

Returns true if argument is error(), false if ok()

is_error(error("Error")) == true
is_ok(arg)
is_ok(t) :: boolean

Returns true if argument is ok(), false if error()

is_ok(ok(5)) == true
retry_rec(n, delay, lambda)
unwrap(arg)
unwrap(t) :: term

Returns value x if argument is ok(x), raises e if error(e)

5 == unwrap(ok(5))

Macros

error(err)
ok(res)
retry(opts \\ [], list)

Retry in case of error.

Possible options:

  • :n - times to retry
  • :delay — delay between retries

##Example

result = retry n: 3, delay: 3000 do
  remote_service()
end

This will call remove_service() 4 times (1 time + 3 retries) with an interval of 3 seconds.