diff --git a/emis_funky_funktions.py b/emis_funky_funktions.py index 5227ae2..566acbc 100644 --- a/emis_funky_funktions.py +++ b/emis_funky_funktions.py @@ -822,6 +822,25 @@ def sequence(s: Sequence[Result[A, B]]) -> Result[Sequence[A], B]: o = next(filter(not_, s)) assert isinstance(o, Err) return o #type:ignore +def partition(s: Sequence[Result[A, B]]) -> tuple[Sequence[A], Sequence[B]]: + """ + Turn a list of results into a list of Ok values and a list of Err values + + >>> partition([Ok(1), Ok(2), Err('Aaaaa!'), Ok(4), Err('OH GOD HELP')]) + ((1, 2, 4), ('Aaaaa!', 'OH GOD HELP')) + """ + return ( + tuple( + succ.val + for succ in s + if isinstance(succ, Ok) + ), + tuple( + e.err + for e in s + if isinstance(e, Err) + ), + ) def trace(x: A) -> A: """