From 3b4c95af0aa1c131c2e2abe368cb62c19e116418 Mon Sep 17 00:00:00 2001 From: Philipp Balzarek Date: Tue, 25 Feb 2014 18:55:52 +0100 Subject: [PATCH] add pullMessageA and remove Annotations from pullMessage --- source/Network/Xmpp/Concurrent/Message.hs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/source/Network/Xmpp/Concurrent/Message.hs b/source/Network/Xmpp/Concurrent/Message.hs index a83d680..5a93519 100644 --- a/source/Network/Xmpp/Concurrent/Message.hs +++ b/source/Network/Xmpp/Concurrent/Message.hs @@ -9,13 +9,18 @@ import Network.Xmpp.Concurrent.Basic -- | Draw and discard stanzas from the inbound channel until a message or -- message error is found. Returns the message or message error with annotations. -pullMessage :: Session -> IO (Either (Annotated MessageError) (Annotated Message)) -pullMessage session = do +pullMessageA :: Session -> IO (Either (Annotated MessageError) (Annotated Message)) +pullMessageA session = do (stanza, as) <- atomically . readTChan $ stanzaCh session case stanza of MessageS m -> return $ Right (m, as) MessageErrorS e -> return $ Left (e, as) - _ -> pullMessage session + _ -> pullMessageA session + +-- | Draw and discard stanzas from the inbound channel until a message or +-- message error is found. Returns the message or message error. +pullMessage :: Session -> IO (Either MessageError Message) +pullMessage s = either (Left . fst) (Right . fst) <$> pullMessageA s -- | Draw and discard stanzas from the inbound channel until a message is -- found. Returns the message with annotations. @@ -31,7 +36,7 @@ getMessage s = fst <$> getMessageA s -- the given predicate is found. Returns the matching message with annotations. waitForMessageA :: (Annotated Message -> Bool) -> Session -> IO (Annotated Message) waitForMessageA f session = do - s <- pullMessage session + s <- pullMessageA session case s of Left _ -> waitForMessageA f session Right m | f m -> return m @@ -49,7 +54,7 @@ waitForMessageErrorA :: (Annotated MessageError -> Bool) -> Session -> IO (Annotated MessageError) waitForMessageErrorA f session = do - s <- pullMessage session + s <- pullMessageA session case s of Right _ -> waitForMessageErrorA f session Left m | f m -> return m @@ -68,7 +73,7 @@ filterMessagesA :: (Annotated MessageError -> Bool) -> Session -> IO (Either (Annotated MessageError) (Annotated Message)) filterMessagesA f g session = do - s <- pullMessage session + s <- pullMessageA session case s of Left e | f e -> return $ Left e | otherwise -> filterMessagesA f g session @@ -81,8 +86,9 @@ filterMessagesA f g session = do filterMessages :: (MessageError -> Bool) -> (Message -> Bool) -> Session - -> IO (Either (Annotated MessageError) (Annotated Message)) -filterMessages f g s = filterMessagesA (f . fst) (g . fst) s + -> IO (Either MessageError Message) +filterMessages f g s = either (Left . fst) (Right . fst) <$> + filterMessagesA (f . fst) (g . fst) s -- | Send a message stanza. Returns @False@ when the 'Message' could not be -- sent.