The trouble with Java exceptions is that the forced error checking is rarely handled at the call site, making the code no longer linear. Calling var a = foo();bar(a); does not necessarily imply bar() will be called. Using a more functional approach, the exception can be even more explicit making it easier to reason about.