s.toInt
оценивается вне монады IO
.Происходит следующее: сначала вы оцениваете s.toInt
и пытаетесь передать результат этого в IO.succeed
, но перед тем, как что-либо передать в IO.succeed
, уже было сгенерировано исключение.Название succeed
уже в основном говорит о том, что вы уверены, что все, что вы передаете, является простым значением, которое не может дать сбой.
В документах предлагается использовать Task.effect
, IO.effect
или ZIO.effect
для подъемаэффект, который может потерпеть неудачу в ZIO
.