Monday, October 18, 2021

Show HN: Result monad for Elixir inspired by Rust Result type

Rustic Result

CICDHex.pm LicenseHex Docs

Result monad for Elixir inspired by Rust Result type.

Installation

This package can be installed by adding rustic_result to your list of dependencies in mix.exs:

def deps do
  [
    {:rustic_result, "~> 0.3.0"}
  ]
end

Usage

import Rustic.Result

ok(42) == {:ok, 42}
# true

err(:not_found) == {:error, :not_found}
# true

ok(42) |> is_ok?()
# true

err(:not_found) |> is_err?()
# true

ok(1) |> and_then(fn v -> ok(v + 1) end)
# ok(2)

ok(1) |> and_then(fn _ -> err(:not_found) end)
# err(:not_found)

err(:not_found) |> and_then(fn v -> ok(v + 1) end)
# err(:not_found)

ok(1) |> or_else(fn _ -> ok(2) end)
# ok(1)

err(:not_found) |> or_else(fn :not_found -> ok(1) end)
# ok(1)

err(:not_found) |> or_else(fn :not_found -> err(:invalid) end)
# err(:invalid)

ok(1) |> unwrap!()
# 1

err(:not_found) |> unwrap!()
# ** (Rustic.Result.UnhandledError) Expected an Ok result, ":not_found" given.

ok(1) |> unwrap_or(2)
# 1

err(:not_found) |> unwrap_or(2)
# 2

ok(1) |> unwrap_err!()
# ** (Rustic.Result.MissingError) Expected an Err result, "1" given.

err(:not_found) |> unwrap_err!()
# :not_found

ok(ok(1)) |> flatten()
# ok(1)

ok(err(:failed)) |> flatten()
# err(:failed)

ok(1) |> flatten()
# ok(1)


from Hacker News https://ift.tt/3DSG5KD

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.