LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Вот этим. throwIO гарантирует порядок операций, throw – нет.

С seq как раз и есть магия. Так как по определению seq вычисляет первый аргумент и возвращает второй, если первый не ошибка. То есть throwIO e не является ошибкой. А становится ею только когда её результат вычисляется внутри монады IO.

Ловли чем?

Я же написал псевдокод. Если первый элемент списка событий является событием от второго потока, его обрабатываем. Фактически, полный аналог receive/end из Эрланга.

Если ты хочешь как в Erlang, у тебя все функции должны возвращать IO, потому что чистых функций в Erlang нет. Как и статической типизации.

В моём варианте IO вообще нет и все функции чистые. Как и в раннем Хаскеле. Только ленивый список событий на входе и возврат другого ленивого списка событий на выходе.

Исходная версия monk, :

Вот этим. throwIO гарантирует порядок операций, throw – нет.

С seq как раз и есть магия. Так как по определению seq вычисляет первый аргумент и возвращает второй, если первый не ошибка. То есть throwIO e не является ошибкой. А становится ею только когда её результат вычисляется внутри монады IO.

Ловли чем?

Я же написал [url=https://www.linux.org.ru/forum/development/16883697?cid=16883893]псевдокод[/url]. Если первый элемент списка событий является событием от второго потока, его обрабатываем. Фактически, полный аналог receive/end из Эрланга.

Если ты хочешь как в Erlang, у тебя все функции должны возвращать IO, потому что чистых функций в Erlang нет. Как и статической типизации.

В моём варианте IO вообще нет и все функции чистые. Как и в раннем Хаскеле. Только ленивый список событий на входе и возврат другого ленивого списка событий на выходе.