FR>Хаскелисты наоборот до сих пор жалеют что с дуру добавили исключения, но выпилить их уже не могут.
Хехе

Вариантов-то всего два, либо есть checked exception(s), либо нет. Если они есть, приходится везде explicitly добавлять что-то вроде ? (Rust), maybe (Erlang), with (Elixir) и прочие варианты.
Если нет, то "что-то может быть где-то implicitly, и этого не будет видно". И так плохо, и этак. Так что варианта по сути два: либо добавлять exceptions в язык, либо делать их поверх (путем создания всяких там Result<Success,Error>, {ok, Result} | {error, Reason}, и т.п.).
Лично мне нравятся exceptions, просто потому что кода меньше. Но я также понимаю тех, кто хотят explicit mention что функция может стрельнуть. Оно удобно, особенно в хорошо изолированных проектах. Но когда попадаешь в гигантский монолит из легаси-спагетти, еще и работающего на распределенном кластере, там практически каждый вызов имеет этот maybe/with/?.