Wouldn't it make sense to use scala.util.Try? Then a user could pattern match over Success(result) and Failure(exception).