Support for an all_catch
idiom will be implemented to turn blocks which might throw exceptions into Option or Either
results. If this proves useful (and a good fit for Ruby), then more narrow functional catchers can be implemented as well.

deffind_person(name)casenamewhen/Jack/i,/John/iRight(name.capitalize)elseLeft("No such person: #{name.capitalize}")endend# success looks like this:
find_person("Jack")# => Right("Jack")
# failure looks like this:
find_person("Jill")# => Left("No such person: Jill")
# lift the contained values into Array, in order to combine them:
find_person("Joan").lift_to_a# => Left(["No such person: Joan"])
# on the 'happy path', combine and transform successes into a single success result:
(find_person("Jack").lift_to_a+find_person("John").lift_to_a).right.map{|*names|names.join(" and ")}# => Right("Jack and John")
# but if there were errors, we still have a Left with all the errors inside:
(find_person("Jack").lift_to_a+find_person("John").lift_to_a+find_person("Jill").lift_to_a+find_person("Joan").lift_to_a).right.map{|*names|names.join(" and ")}# => Left(["No such person: Jill", "No such person: Joan"])
# equivalent to the previous example, but shorter:
%w(JackJohnJillJoan).map{|nm|find_person(nm).lift_to_a}.inject(:+).right.map{|*names|names.join(" and ")}# => Left(["No such person: Jill", "No such person: Joan"])