The Ok type is a simple error handler, basically equivalent to
Either [SomeException].

One of the primary reasons why this type was introduced is that
Either SomeException had not been provided an instance for Alternative,
and it would have been a bad idea to provide an orphaned instance for a
commonly-used type and typeclass included in base.

Extending the failure case to a list of SomeExceptions enables a
more sensible Alternative instance definitions: <|> concatinates
the list of exceptions when both cases fail, and empty is defined as
'Errors []'. Though <|> one could pick one of two exceptions, and
throw away the other, and have empty provide a generic exception,
this avoids cases where empty overrides a more informative exception
and allows you to see all the different ways your computation has failed.