Reduce into unique addresses
This commit is contained in:
		@@ -9,11 +9,15 @@ import qualified Data.Conduit.Text as CT
 | 
			
		||||
 | 
			
		||||
import Data.Email
 | 
			
		||||
import Data.Email.Header
 | 
			
		||||
       (Header)
 | 
			
		||||
       (Header(..))
 | 
			
		||||
 | 
			
		||||
import System.IO
 | 
			
		||||
       (stdin)
 | 
			
		||||
 | 
			
		||||
import qualified Data.Foldable as F
 | 
			
		||||
 | 
			
		||||
import qualified Data.Set as S
 | 
			
		||||
 | 
			
		||||
combine :: (MonadUnliftIO m, MonadResource m, MonadThrow m, MonadIO m) => ConduitM FilePath Header m ()
 | 
			
		||||
combine = await >>= \case
 | 
			
		||||
  Nothing -> pure ()
 | 
			
		||||
@@ -21,4 +25,17 @@ combine = await >>= \case
 | 
			
		||||
 | 
			
		||||
run :: IO ()
 | 
			
		||||
run = do
 | 
			
		||||
  runResourceT $ runConduit (CB.sourceHandle stdin .| CT.decode CT.utf8 .| CT.lines .| C.map T.unpack .| combine .| C.mapM_ (liftIO . print))
 | 
			
		||||
  x <- runResourceT $ runConduit stream
 | 
			
		||||
  F.for_ x print
 | 
			
		||||
  where
 | 
			
		||||
    separate = \case
 | 
			
		||||
      From x -> [x]
 | 
			
		||||
      To xs -> F.toList xs
 | 
			
		||||
    stream =
 | 
			
		||||
      CB.sourceHandle stdin
 | 
			
		||||
        .| CT.decode CT.utf8
 | 
			
		||||
        .| CT.lines
 | 
			
		||||
        .| C.map T.unpack
 | 
			
		||||
        .| combine
 | 
			
		||||
        .| C.concatMap separate
 | 
			
		||||
        .| C.foldMap (S.singleton)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user