From c9cf4c1d59d629f3f73992b59038e796e2fd1303 Mon Sep 17 00:00:00 2001 From: Mats Rauhala Date: Thu, 10 Dec 2020 23:13:23 +0200 Subject: [PATCH] Catch exceptions --- src/Control/Addressbook/Streaming.hs | 3 +-- src/Data/Email.hs | 7 +++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Control/Addressbook/Streaming.hs b/src/Control/Addressbook/Streaming.hs index e8b6246..d9f90f8 100644 --- a/src/Control/Addressbook/Streaming.hs +++ b/src/Control/Addressbook/Streaming.hs @@ -5,7 +5,6 @@ import qualified Data.Text as T import Conduit import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.Combinators as C -import qualified Data.Conduit.List as CL import qualified Data.Conduit.Text as CT import Data.Email @@ -15,7 +14,7 @@ import Data.Email.Header import System.IO (stdin) -combine :: (MonadResource m, MonadThrow m, MonadIO m) => ConduitM FilePath Header m () +combine :: (MonadUnliftIO m, MonadResource m, MonadThrow m, MonadIO m) => ConduitM FilePath Header m () combine = await >>= \case Nothing -> pure () Just path -> (CB.sourceFile path .| parseEmail) >> combine diff --git a/src/Data/Email.hs b/src/Data/Email.hs index 77e73ef..72ee8a2 100644 --- a/src/Data/Email.hs +++ b/src/Data/Email.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE TypeApplications #-} module Data.Email where import Data.Email.Header @@ -9,5 +10,7 @@ import qualified Data.Conduit.Text as CT import Data.ByteString (ByteString) -parseEmail :: (MonadThrow m, Monad m) => ConduitM ByteString Header m () -parseEmail = CT.decode CT.utf8 .| CT.lines .| C.concatMap decode +parseEmail :: (MonadUnliftIO m, MonadThrow m, Monad m) => ConduitM ByteString Header m () +parseEmail = catchC (CT.decode CT.utf8) err .| CT.lines .| C.concatMap decode + where + err e = liftIO (print @CT.TextException e) >> yield ""