LINUX.ORG.RU

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

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

И пример с liftIO выглядит как беспомощный workaround

Кстати, вот вспомнилось из моей же практики. LiftIO отлично подошел для обработки ошибок IOException в монаде, основанной на продолжениях (стандартный ContT этого не умеет - там банально не хватает еще одного дополнительного продолжения для перенаправления вычисления по другой ветке, где уже расставлены нужные обработчики). Если бы не было liftIO, то я даже не представляю, как можно было бы обработать IOException в ленивом языке. А сейчас все получилось у меня очень стройно и красиво. Ошибки IOException нужно перехватывать только внутри liftIO, потому что в чистом коде их возникнуть не должно в принципе (да, есть еще предательский throw, который это дело может обойти, но это уже будет логическая ошибка программиста-пользователя).

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

И пример с liftIO выглядит как беспомощный workaround

Кстати, вот вспомнилось, из моей же практики. LiftIO отлично подошел для обработки ошибок IOException в монаде, основанной на продолжениях (стандартный ContT этого не умеет - там банально не хватает еще одного дополнительного продолжения для перенаправления вычисления по другой ветке, где уже расставлены нужные обработчики). Если бы не было liftIO, то я даже не представляю, как можно было бы обработать IOException в ленивом языке. А сейчас все получилось у меня очень стройно и красиво. Ошибки IOException нужно перехватывать только внутри liftIO, потому что в чистом коде их возникнуть не должно в принципе (да, есть еще предательский throw, который это дело может обойти, но это уже будет логическая ошибка программиста-пользователя).