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