Заебатая тема: исключения как монады
Мы тут как-то с
theiced спорили за исключения vs коды ошибок (или null), когда он на дотнете кромешный ад писал.
Вот тут по ссылке http://ivan-gandhi.livejournal.com/1867305.html все расписано самоочевидным образом, чем печальны null, чем хороши исключения, и почему вообще положено использовать Option (Maybe T) в качестве типа для возвращения результата.
У исключений есть еще ценное свойство, которое в Maybe особо не эмулируешь, а в Either будет закат солнца вручную - стеки вызовов. Ну и разные типы ошибок в Maybe тоже не засунешь, Nothing он и есть Nothing. В Either их тоже особо не засунешь, без заворачивания в алгебраический тип по одному конструктору на каждый вид исключения(oh shit, в жабе же все равно исключения checked, это примерно оно и есть).
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Вот тут по ссылке http://ivan-gandhi.livejournal.com/1867305.html все расписано самоочевидным образом, чем печальны null, чем хороши исключения, и почему вообще положено использовать Option
У исключений есть еще ценное свойство, которое в Maybe особо не эмулируешь, а в Either будет закат солнца вручную - стеки вызовов. Ну и разные типы ошибок в Maybe тоже не засунешь, Nothing он и есть Nothing. В Either их тоже особо не засунешь, без заворачивания в алгебраический тип по одному конструктору на каждый вид исключения(oh shit, в жабе же все равно исключения checked, это примерно оно и есть).
no subject
no subject
no subject
А в типизированной функциональщине (в среднем её случае) проявляется такой момент: если функция возвращает тупл, то оба компонента имеют фиксированный тип, то есть, если первый компонент будет представлять "тег" (ok/error), то второй компонент будет обязан иметь какой-то один тип. Если представить ошибку, например, строкой, то и успешный результат будет должен иметь тип строки.
Оттуда и необходимость в индуктивных типах данных -- чтобы разнотипные значения, которые могут включаться в значения данного типа, можно было разделить по тегу, а затем и протипизировать по содержимому (это если грубо передавать "машинерию" процесса).
no subject
"если первый компонент будет представлять "тег" (ok/error), то"
проще исключить из комментария для простоты восприятия.