More utilities for options&results

This commit is contained in:
Emi Simpson 2023-02-08 21:44:43 -05:00
parent bdca0186da
commit 179198e59d
Signed by: Emi
GPG Key ID: A12F2C2FFDC3D847
1 changed files with 19 additions and 1 deletions

View File

@ -184,6 +184,12 @@ def bind_opt(f: Callable[[A], Option[B]], o: Option[A]) -> Option[B]:
return f(val)
case none:
return none
def note(e: B, o: Option[A]) -> Result[A, B]:
match o:
case Some(val):
return Ok(val)
case None:
return Err(e)
# Results!
@dataclass(frozen=True)
@ -204,4 +210,16 @@ def bind_res(f: Callable[[A], Result[C, B]], r: Result[A, B]) -> Result[C, B]:
case Ok(val):
return f(val)
case not_okay:
return not_okay
return not_okay
def map_err(f: Callable[[B], C], r: Result[A, B]) -> Result[A, C]:
match r:
case Err(e):
return Err(f(e))
case oki_doke:
return oki_doke
def hush(r: Result[A, Any]) -> Option[A]:
match r:
case Ok(val):
return Some(val)
case not_okay:
return None