equal
deleted
inserted
replaced
12 import qualified Data.List as L |
12 import qualified Data.List as L |
13 import Data.Word |
13 import Data.Word |
14 import Data.Bits |
14 import Data.Bits |
15 import Control.Arrow |
15 import Control.Arrow |
16 import Data.Maybe |
16 import Data.Maybe |
17 import Codec.Compression.Zlib as Z |
|
18 ------------- |
17 ------------- |
19 import CoreTypes |
18 import CoreTypes |
20 import Utils |
19 import Utils |
21 |
20 |
22 {- |
21 {- |
23 this is snippet from http://stackoverflow.com/questions/10043102/how-to-catch-the-decompress-ioerror |
22 this is snippet from http://stackoverflow.com/questions/10043102/how-to-catch-the-decompress-ioerror |
24 because standard 'catch' doesn't seem to catch decompression errors for some reason |
23 because standard 'catch' doesn't seem to catch decompression errors for some reason |
25 -} |
24 -} |
26 import qualified Codec.Compression.Zlib.Internal as Z |
25 import qualified Codec.Compression.Zlib.Internal as Z |
27 |
26 |
28 decompressWithoutExceptions :: BL.ByteString -> Either Z.DecompressError BL.ByteString |
27 decompressWithoutExceptions :: BL.ByteString -> Either String BL.ByteString |
29 decompressWithoutExceptions = finalise |
28 decompressWithoutExceptions = finalise |
30 . Z.foldDecompressStream cons nil err |
29 . Z.foldDecompressStream cons nil err |
31 . Z.decompressWithErrors Z.gzipFormat Z.defaultDecompressParams |
30 . Z.decompressWithErrors Z.zlibFormat Z.defaultDecompressParams |
32 where err errorCode _ = Left errorCode |
31 where err errorCode msg = Left msg |
33 nil = Right [] |
32 nil = Right [] |
34 cons chunk = right (chunk :) |
33 cons chunk = right (chunk :) |
35 finalise = right BL.fromChunks |
34 finalise = right BL.fromChunks |
36 {- end snippet -} |
35 {- end snippet -} |
37 |
36 |