// Result represents the result of something that may succeed or fail. // `Ok` means it was successful, `Error` means it failed. pub fn is_ok(result: Result(a, e)) -> Bool { case result { Error(_) -> False Ok(_) -> True } } pub fn is_error(result: Result(a, e)) -> Bool { case result { Ok(_) -> False Error(_) -> True } } pub fn map( over result: Result(a, e), with fun: fn(a) -> b, ) -> Result(b, e) { case result { Ok(x) -> Ok(fun(x)) Error(e) -> Error(e) } } pub fn map_error( over result: Result(a, e), with fun: fn(e) -> f, ) -> Result(a, f) { case result { Ok(x) -> Ok(x) Error(error) -> Error(fun(error)) } } pub fn flatten(result: Result(Result(a, e), e)) -> Result(a, e) { case result { Ok(x) -> x Error(error) -> Error(error) } } pub fn then( result: Result(a, e), apply fun: fn(a) -> Result(b, e), ) -> Result(b, e) { case result { Ok(x) -> fun(x) Error(e) -> Error(e) } } pub fn unwrap(result: Result(a, e), or default: a) -> a { case result { Ok(v) -> v Error(_) -> default } } // A value that is either there or not there pub type Option(value) = Result(value, Nil) pub fn none() -> Option(a) { Error(Nil) }