Add partition

This commit is contained in:
Emi Simpson 2023-03-07 20:07:17 -05:00
parent 206c0a0ec0
commit 92d458de85
Signed by: Emi
GPG key ID: A12F2C2FFDC3D847

View file

@ -822,6 +822,25 @@ def sequence(s: Sequence[Result[A, B]]) -> Result[Sequence[A], B]:
o = next(filter(not_, s)) o = next(filter(not_, s))
assert isinstance(o, Err) assert isinstance(o, Err)
return o #type:ignore 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: def trace(x: A) -> A:
""" """