私は圧縮することができるファイル読み取りにこのコードスニペットを書いた:それはうまくコンパイル解凍IOErrorを取得するにはどうすればよいですか?
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
を、これは非圧縮ファイルを扱うための有効な方法ではないようです。圧縮ファイルのコードを実行すると、素敵に動作しますが、圧縮されていないファイルが例外で失敗します
*** Exception: Codec.Compression.Zlib: incorrect header check
これを可能にする方法上の任意のアイデア?
は 'IO.try'は推奨されていません(私はあなたがData.ByteString.LazyはL.の資格インポートしていると推定します) ... Control.Exception.tryはどうでしょうか? http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Exception.html#v:try –
さらに「IO.try」は、純粋なコードから例外をキャッチしません'Control.Exception.try'は行います。 – dave4420