Поскольку основным источником недетерминированных исключений является IO, и вы можете перехватывать исключение только внутри IO monad, он сулит разумно не бросать исключения из чистых функций.
В самом деле, что может быть так "исключительным" в чистой функции? Пустой список или деление на ноль не являются действительно исключительными и можно ожидать. Поэтому почему бы не использовать только Maybe
, Either
или []
для представления таких случаев в чистом коде.
Существует ряд чистых функций, таких как (!!)
, tail
, div
, которые генерируют исключения. В чем причина их небезопасности?