26 lines
718 B
Haskell
26 lines
718 B
Haskell
module Control.Addressbook.Streaming where
|
|
|
|
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
|
|
import Data.Email.Header
|
|
(Header)
|
|
|
|
import System.IO
|
|
(stdin)
|
|
|
|
combine :: (MonadResource m, MonadThrow m, MonadIO m) => ConduitM FilePath Header m ()
|
|
combine = await >>= \case
|
|
Nothing -> pure ()
|
|
Just path -> (CB.sourceFile path .| parseEmail) >> combine
|
|
|
|
run :: IO ()
|
|
run = do
|
|
runResourceT $ runConduit (CB.sourceHandle stdin .| CT.decode CT.utf8 .| CT.lines .| C.map T.unpack .| combine .| C.mapM_ (liftIO . print))
|