[Haskell-cafe] cannot catch exception

Kees Bleijenberg K.Bleijenberg at lijbrandt.nl
Mon Mar 4 20:26:41 UTC 2019



I tried your first suggestion $!. Nothing changed.

When I tried ‘Right <$> evaluate (TE.decodeUtf8 bufferStrict)’ success. handleException catches the exception. 

I don’t understand why. Maybe the documentation for the evaluate function below has to do with it:

There is a subtle difference between  <http://hackage.haskell.org/package/base-> evaluate x and  <http://hackage.haskell.org/package/base-> return  <http://hackage.haskell.org/package/base-> $! x, analogous to the difference between  <http://hackage.haskell.org/package/base-> throwIO and  <http://hackage.haskell.org/package/base-> throw. If the lazy value x throws an exception,  <http://hackage.haskell.org/package/base-> return  <http://hackage.haskell.org/package/base-> $! x will fail to return an  <http://hackage.haskell.org/package/base-> IO action and will throw an exception instead.  <http://hackage.haskell.org/package/base-> evaluate x, on the other hand, always produces an  <http://hackage.haskell.org/package/base-> IO action; that action will throw an exception upon execution iff x throws an exception upon evaluation.

I don’t fully understand this, but evaluate works. Thanks!




readCDFile :: FilePath -> FilePath -> IO (Either String T.Text)

readCDFile baseDir fn = do

  catch ( do 

            buffer <- B.readFile (combine baseDir fn)  --reads strict the whole file

            let bufferStrict = B.toStrict buffer

return $ Right $! TE.decodeUtf8 bufferStrict    -- this doesn’t work   

Right <$> evaluate (TE.decodeUtf8 bufferStrict) –- this does    

liftM Right $ evaluate (TE.decodeUtf8 bufferStrict) – this works too   

         ) exceptionHandler



Van: David Fox [mailto:dsf at seereason.com] 

This fixes it by forcing the evaluation of the decode where it can be caught:


return $ Right $! TE.decodeUtf8 bufferStrict




Right <$> evaluate (TE.decodeUtf8 bufferStrict)



Dit e-mailbericht is gecontroleerd op virussen met Avast antivirussoftware.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20190304/26c2a6c4/attachment.html>

More information about the Haskell-Cafe mailing list