Thinking in a type-driven fashion doesn't require throwing Ruby away. Here are some examples of how types can make our Ruby programs better, while still looking and feeling like Ruby.
f return "Unable to perform step 1: #{e.message}" end begin result = operation_that_may_fail_2(result) rescue Failure1 => f2 return "Step 2 failed " end begin result = operation_that_may_fail_3(result) rescue Failure1 => f3 return "" end