tôi đã viết đoạn mã này để đọc một tập tin có thể được nén:Làm thế nào để bắt IOError giải nén?
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
Nó biên dịch tốt, nhưng có vẻ như đây không phải là cách hợp lệ để xử lý các file nén. Chạy mã trên một tệp nén hoạt động tốt, nhưng một tệp không nén không thành công với một ngoại lệ:
*** Exception: Codec.Compression.Zlib: incorrect header check
Bất kỳ ý tưởng nào về cách thực hiện điều này có thể?
'IO.try' bị phản đối ... về Control.Exception.try' thì sao? http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Exception.html#v:try –
Thêm vào điểm này, 'IO.try' đặc biệt không bắt ngoại lệ từ mã thuần túy , trong khi 'Control.Exception.try' thực hiện. – dave4420