LINUX.ORG.RU

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

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

Со стороны выглядит все очень просто. Монадический тип Cont со своими аналогами throw, catch и finally, плюс liftIO, где собственно ошибка IOException и перехватывается.

Идея та же самая, что в F# async workflow, только у Дона Сайма ошибка перехватывается внутри самого комбинатора >>=, который там зовется Bind, ибо язык F# - энергичный. В хаскеле большого смысла перехватывать IOException в >>= нет, да и по хорошему не получится из-за ленивости (и чистоты), а вот в liftIO - вполне легко.

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

Со стороны выглядит все очень просто. Монадический тип Cont со своими аналогами throw, catch и finally, плюс liftIO, где собственно ошибка IOException и перехватывается.

Идея та же самая, что в F# async workflow, только у Дона Сайма ошибка перехватывается внутри самого комбинатора >>=, который там зовется Bind, ибо язык F# - энергичный. В хаскеле большого смысла перехватывать IOException в >>= нет, да и по хорошему не получится из-за ленивости, а вот в liftIO - вполне легко.