@@ -231,7 +231,6 @@ matchResponsesWithRequests
231231 :: forall t rawRequest rawResponse request response m.
232232 ( MonadFix m
233233 , MonadHold t m
234− , MonadFail m
235234 , PrimMonad m
236235 , Reflex t
237236 )
@@ -265,8 +264,8 @@ matchResponsesWithRequests f send recv = withTagGen $ \tagGen -> mdo
265264 -> Event t ( PatchMap Int (Decoder rawResponse response)
266265 , Map Int rawRequest )
267266 -- A map of requests expecting responses, and the tagged raw requests
268− processOutgoing eventOutgoingRequest = flip pushAlways eventOutgoingRequest $ \(RequestData tagGen requestEnvelopes) -> do
269− let results = ffor (requestEnvelopesToList $ NonEmptyDeferred.toList requestEnvelopes) $ \(k :=> v) ->
267+ processOutgoing eventOutgoingRequest = flip pushAlways eventOutgoingRequest $ \(RequestData _ requestEnvelopes) -> do
268+ let results = ffor (requestEnvelopesToList requestEnvelopes) $ \(k :=> v) ->
270269 let (rawRequest, responseDecoder) = f v
271270 in (tagId k, rawRequest, Decoder k responseDecoder)
272271 let patchWaitingFor = PatchMap $ Map.fromList $ (\(n, _, dec) -> (n, Just dec)) <$> results
@@ -279,8 +278,9 @@ matchResponsesWithRequests f send recv = withTagGen $ \tagGen -> mdo
279278 -- of expected responses.
280279 processIncoming
281280 :: Incremental t (PatchMap Int (Decoder rawResponse response))
282− -> TagGen (PrimState m) s
283281 -- A map of outstanding expected responses
282+ -> TagGen (PrimState m) s
283+ -- A tag generator
284284 -> Event t (Int, rawResponse)
285285 -- A incoming response paired with its identifying key
286286 -> Event t (ResponseData (PrimState m) response, PatchMap Int v)
@@ -291,11 +291,20 @@ matchResponsesWithRequests f send recv = withTagGen $ \tagGen -> mdo
291291 Nothing -> return Nothing -- TODO How should lookup failures be handled here? They shouldn't ever happen..
292292 Just (Decoder tag responseDecoder) ->
293293 return $ Just
294− ( ResponseData tagGen $ TagMap.singletonTagMap (unsafeTagFromId n) (responseDecoder rawRsp)
294+ ( singletonResponseData tagGen (unsafeTagFromId n) (responseDecoder rawRsp)
295295 , PatchMap $ Map.singleton n Nothing
296296 )
297297
298−requestEnvelopesToList :: forall s request. [RequestEnvelope s request] -> [DSum (Tag s) request]
299−requestEnvelopesToList reqEnvs = f <$> reqEnvs
300− where f :: (RequestEnvelope s request) -> DSum (Tag s) request
301− f (RequestEnvelope (Just tag) v) = tag :=> v
298+requestEnvelopesToList :: forall s request. NonEmptyDeferred (RequestEnvelope s request) -> [DSum (Tag s) request]
299+requestEnvelopesToList requestEnvelopes = catMaybes $ f <$> NonEmptyDeferred.toList requestEnvelopes
300+ where f :: (RequestEnvelope s request) -> Maybe (DSum (Tag s) request)
301+ f (RequestEnvelope (Just tag) v) = Just (tag :=> v)
302+ f (RequestEnvelope Nothing _) = Nothing
303+
304+singletonRequestData :: TagGen ps s -> Maybe (Tag s a) -> request a -> RequestData ps request
305+singletonRequestData tagGen maybeTag request =
306+ RequestData tagGen $ NonEmptyDeferred.singleton $ RequestEnvelope maybeTag request
307+
308+singletonResponseData :: TagGen ps s -> Tag ps s -> response a -> ResponseData ps response
309+singletonResponseData tagGen tag response =
310+ ResponseData tagGen $ TagMap.singletonTagMap tag response