Re[13]: Result objects - все-таки победили Exceptions?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.01.25 11:43
Оценка:
Здравствуйте, korvin_, Вы писали:
_>Что именно? OOM там не ловится никак. То же самое с SO — это внутренняя вещь рантайма.
Ну, то есть panic. Скажем так: в такой среде сложно писать софт, который должен работать 24*7.

_>В остальном — по-разному. Например, функция div имеет тип (Integral a => a -> a -> a) без указания какого либо исключения деления на 0, но исключение может возникнуть.

Хм. То есть кидать можно всё, что угодно и где угодно?
Я посмотрел вот сюда. Написано

The great thing about Haskell is that it is not necessary to hard-wire the exception handling into the language.

То есть исключений нет, но если хочется прикрутить их поддержку, то можно их реализовать самостоятельно.
Читаем дальше:

Haskell solves the problem a diplomatic way: Functions return error codes, but the handling of error codes does not uglify the calling code.

Там написана неправда?
_>Ну не совсем.

S>>А что произойдёт, если хаскелл не смог сконструировать Add из Expr и Expr из-за OutOfMemory или StackOverflow?

_>Упадёт.
Как-то грустненько.

S>>Почему нельзя было просто добавить OOM в определение Expr как одной из альтернатив?


_>Потому что OOM — это не часть Expr. Сигнатуры в примере с OOM вымышленные.

_>Что нам даст добавление OOM в качестве альтернативы?
_>Эти альтернативы -- просто конструкторы значений.
А выглядит как алгебраический тип.

_>Всё равно, что в Java написать


_>
_>var oom = new SomeInterface() {
_>    ...
_>};
_>

_>Как это поможет?
Поможет не писать везде Expr | OOM, а встроить OOM в Expr.
_>
_>expr0 = If (Mul ...) ... -- где здесь OOM?
_>

В рамках Haskell, наверное, нигде. Язык не готов к работе в условиях дефицита памяти

_>IO так и делает: бросает исключения без указания в сигнатуре.

Ну, то есть в IO встроена возможность бросать всё что угодно? откуда в div появилась возможность "бросить" divisionByZero?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.