///|
fn parse_or_default(text : String) -> Int {
  @string.parse_int(text) catch {
    _ => -1
  }
}

///|
fn main {
  let success : Result[Int, String] = Ok(parse_or_default("42"))
  let missing : Result[Int, String] = Err("missing")
  let first = match success {
    Ok(value) => value
    Err(_) => -1
  }
  let fallback = match missing {
    Ok(value) => value
    Err(_) => parse_or_default("not-a-number")
  }
  let payload = Json::object(
    Map::from_array([
      ("parsed", Json::number(first.to_double())),
      ("fallback", Json::number(fallback.to_double())),
      ("option_some", Json::boolean(Some(first) is Some(_))),
      ("option_none", Json::boolean((None : Int?) is None)),
    ]),
  )
  println(payload.stringify())
}