Use the builtin Result class and runCatching/fold and be done with it. Yes, it has shortcomings but works well enough in practice.