git.iko.soy/typeable/servant-reflex
on master help sign in
`fanReqResult` (and tagged alternative)
f6d2b36Marco Toniut
src/Servant/Common/Req.hs+21
@@ -12,6 +12,7 @@ module Servant.Common.Req where
12
12
13-------------------------------------------------------------------------------
13-------------------------------------------------------------------------------
14import Control.Applicative (liftA2, liftA3)
14import Control.Applicative (liftA2, liftA3)
15+import Control.Arrow ((&&&))
15import Control.Concurrent
16import Control.Concurrent
16import Control.Monad (join)
17import Control.Monad (join)
17import Control.Monad.IO.Class (MonadIO, liftIO)
18import Control.Monad.IO.Class (MonadIO, liftIO)
@@ -91,6 +92,13 @@ reqFailure (ResponseFailure _ s _) = Just s
91reqFailure (RequestFailure _ s) = Just s
92reqFailure (RequestFailure _ s) = Just s
92reqFailure _ = Nothing
93reqFailure _ = Nothing
93
94
95+------------------------------------------------------------------------------
96+-- | Simple filter/accessor like 'reqFailure', but keeping the request tag
97+reqFailure' :: ReqResult tag a -> Maybe (tag,Text)
98+reqFailure' (ResponseFailure tag s _) = Just (tag,s)
99+reqFailure' (RequestFailure tag s) = Just (tag,s)
100+reqFailure' _ = Nothing
101+
94
102
95------------------------------------------------------------------------------
103------------------------------------------------------------------------------
96-- | Simple filter/accessor for the raw XHR response
104-- | Simple filter/accessor for the raw XHR response
@@ -394,6 +402,18 @@ evalResponse decode (tag, xhr) =
394 else ResponseFailure tag errMsg xhr
402 else ResponseFailure tag errMsg xhr
395 in respPayld
403 in respPayld
396
404
405+------------------------------------------------------------------------------
406+-- | Utility for simultaneously accessing/filtering Success and Failure
407+-- response 'Event's,
408+fanReqResult :: Reflex t => Event t (ReqResult tag a) -> (Event t Text, Event t a)
409+fanReqResult = fmapMaybe reqFailure &&& fmapMaybe reqSuccess
410+
411+------------------------------------------------------------------------------
412+-- | Utility for simultaneously accessing/filtering Success and Failure
413+-- response 'Event's, but keeping the request tag
414+fanReqResult' :: Reflex t => Event t (ReqResult tag a) -> (Event t (tag, Text), Event t (tag, a))
415+fanReqResult' = fmapMaybe reqFailure' &&& fmapMaybe reqSuccess'
416+
397
417
398note :: e -> Maybe a -> Either e a
418note :: e -> Maybe a -> Either e a
399note e = maybe (Left e) Right
419note e = maybe (Left e) Right
@@ -407,3 +427,4 @@ builderToText = TE.decodeUtf8 . BL.toStrict . Builder.toLazyByteString
407
427
408escape :: T.Text -> T.Text
428escape :: T.Text -> T.Text
409escape = T.pack . N.escapeURIString (not . N.isReserved) . T.unpack . TE.decodeUtf8 . BL.toStrict . Builder.toLazyByteString . toEncodedUrlPiece
429escape = T.pack . N.escapeURIString (not . N.isReserved) . T.unpack . TE.decodeUtf8 . BL.toStrict . Builder.toLazyByteString . toEncodedUrlPiece
430+