That was a good read. Do you have any more articles you can point me to that explain your design choice of using exceptions rather than monads or even fancier concepts? Is it largely the performance benefits you've argued for here?
I've found exceptions to be problematic from a spooky-action at a distance/coupling perspective, but I mostly write short-lived CLAs and server apps, where perf tuning is a late-stage concern. Anyway, Nim is thoughtfully designed, so I'd like to better understand the tradeoffs you made.