let either_split eithers =
    let rec split_eithers (left, right) = function
        | [] -> (List.rev left, List.rev right)
        | (Left(a))::rest -> split_eithers (a::left, right) rest
        | (Right(b))::rest -> split_eithers (left, b::right) rest in
    split_eithers ([], []) eithers