Библиотека Haskell "zlib" оборачивает библиотеку C и лениво распаковывает. Функция «распаковки» в этой библиотеке может генерировать исключения, которые можно перехватить только в монаде ввода-вывода.
Тип такой:
decompress :: ByteString -> ByteString
Используется следующее:
foldDecompressStream L.Chunk L.Empty
(\_code msg -> error ("Codec.Compression.Zlib: " ++ msg))
Очевидно, что поток данных может быть поврежден, что приведет к генерации исключения.
Если мне нужно перехватить несколько исключений из-за разных причин, как я могу отличить одно исключение от другого, кроме как пытаться сопоставить текст (в котором есть все виды негативов)? Мне нужно восстановить разумно.