pisałem ten fragment kodu do odczytu pliku, który może być skompresowany:Jak złapać IOError dekompresji?
import Codec.Compression.GZip
import IO -- using IO.try
read file = do
let f = L.readFile file
let c = fmap decompress $ f
unzipped <- try c
case unzipped of
Right b -> return b
Left _ -> f
kompiluje dobrze, ale wydaje się, że to nie jest poprawny sposób obsłużyć pliki nieskompresowane. Uruchomienie kodu w pliku skompresowanym działa ładnie, ale nieskompresowany plik nie powiedzie się z wyjątkiem:
*** Exception: Codec.Compression.Zlib: incorrect header check
Każdy pomysł na jak było to możliwe?
'IO.try' jest przestarzała ... co z Control.Exception.try'? http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Exception.html#v;try –
Co ważniejsze, 'IO.try' szczególnie nie przechwytuje wyjątków od czystego kodu , podczas gdy 'Control.Exception.try' ma. – dave4420