geam-stdlib 0.2.0

Official Gleam standard-library providers for Geam
Documentation
import gleam/result

pub fn main() {
  let ok: Result(Int, String) = Ok(1)
  let error: Result(Int, String) = Error("error")

  assert result.is_ok(ok)
  assert !result.is_ok(error)
  assert result.is_error(error)
  assert !result.is_error(ok)

  assert result.map(over: ok, with: fn(value) { value + 1 }) == Ok(2)
  assert result.map(over: error, with: fn(value) { value + 1 }) == error
  assert result.map_error(over: ok, with: fn(value) { value <> "!" }) == ok
  assert result.map_error(over: error, with: fn(value) { value <> "!" })
    == Error("error!")

  assert result.flatten(Ok(Ok(1))) == Ok(1)
  assert result.flatten(Ok(Error("inner"))) == Error("inner")
  assert result.flatten(Error("outer")) == Error("outer")

  assert result.unwrap(ok, or: 0) == 1
  assert result.unwrap(error, or: 0) == 0
  assert result.lazy_unwrap(ok, or: fn() { panic as "unselected lazy default" })
    == 1
  assert result.lazy_unwrap(error, or: fn() { 0 }) == 0
  assert result.unwrap_error(error, or: "default") == "error"
  assert result.unwrap_error(ok, or: "default") == "default"

  assert result.or(ok, Ok(2)) == ok
  assert result.or(error, Ok(2)) == Ok(2)
  assert result.lazy_or(ok, fn() { panic as "unselected lazy result" }) == ok
  assert result.lazy_or(error, fn() { Ok(2) }) == Ok(2)

  assert result.replace(ok, "one") == Ok("one")
  assert result.replace(error, "one") == Error("error")
  assert result.replace_error(ok, Nil) == Ok(1)
  assert result.replace_error(error, Nil) == Error(Nil)

  Nil
}
// @geam:expect Nil