@@ -87,9 +87,9 @@ runRequesterT :: forall t request response m a
87 => RequesterT t request response m a
87 => RequesterT t request response m a
88 -> Event t (ResponseData (PrimState m) response)
88 -> Event t (ResponseData (PrimState m) response)
89 -> m (a, Event t (RequestData (PrimState m) request))
89 -> m (a, Event t (RequestData (PrimState m) request))
90−runRequesterT (RequesterT a) wrappedResponses = withRequesterInternalT $ \(requests :: Event t (NonEmptyDeferred (RequestEnvelope s request))) -> do
90+runRequesterT (RequesterT a) wrappedResponses = withRequesterInternalT $ \requests -> do
91 (_, tg) <- RequesterInternalT ask
91 (_, tg) <- RequesterInternalT ask
92− result <- (unsafeCoerce :: RequesterInternalT FakeRequesterStatePhantom t request response m a -> RequesterInternalT s t request response m a) a
92+ result <- a
93 let responses = fforMaybe wrappedResponses $ \(ResponseData tg' m) -> case tg `geq` tg' of
93 let responses = fforMaybe wrappedResponses $ \(ResponseData tg' m) -> case tg `geq` tg' of
94 Nothing -> trace ("runRequesterT: bad TagGen: expected " <> show tg <> " but got " <> show tg') Nothing --TODO: Warn somehow
94 Nothing -> trace ("runRequesterT: bad TagGen: expected " <> show tg <> " but got " <> show tg') Nothing --TODO: Warn somehow
95 Just Refl -> Just m
95 Just Refl -> Just m
@@ -106,14 +106,18 @@ instance MonadTrans (RequesterT t request response) where
106-- The 'Tag' keys will be used to return the responses to the same place the
106-- The 'Tag' keys will be used to return the responses to the same place the
107-- requests were issued.
107-- requests were issued.
108withRequesterInternalT
108withRequesterInternalT
109+ :: forall t m request response a.
109− :: ( Reflex t
110+ ( Reflex t
110 , PrimMonad m
111 , PrimMonad m
111 , MonadFix m
112 , MonadFix m
113− => (forall s. Event t (NonEmptyDeferred (RequestEnvelope s request)) -> RequesterInternalT s t request response m (Event t (TagMap s response), a))
114+ => (Event t (NonEmptyDeferred (RequestEnvelope FakeRequesterStatePhantom request)) -> RequesterInternalT FakeRequesterStatePhantom t request response m (Event t (TagMap FakeRequesterStatePhantom response), a))
115−withRequesterInternalT f = withTagGen $ \tg -> do
116+withRequesterInternalT f = do
116− rec let RequesterInternalT a = f requests
117+ stg <- newTagGen
118+ let tg = case stg of
119+ Some tg' -> (unsafeCoerce :: TagGen (PrimState m) s -> TagGen (PrimState m) FakeRequesterStatePhantom) tg'
120+ rec let RequesterInternalT a = (unsafeCoerce :: RequesterInternalT s t request response m (Event t (TagMap FakeRequesterStatePhantom response), a) -> RequesterInternalT FakeRequesterStatePhantom t request response m (Event t (TagMap FakeRequesterStatePhantom response), a)) $ f requests
117 ((responses, result), requests) <- runEventWriterT $ runReaderT a (fanTag responses, tg)
121 ((responses, result), requests) <- runEventWriterT $ runReaderT a (fanTag responses, tg)
118 pure result
122 pure result
@@ -199,36 +203,25 @@ instance (Reflex t, PrimMonad m) => Requester t (RequesterInternalT s t request
199 tellEvent $ fmapCheap (NonEmptyDeferred.singleton . RequestEnvelope Nothing) e
203 tellEvent $ fmapCheap (NonEmptyDeferred.singleton . RequestEnvelope Nothing) e
201instance (Adjustable t m, MonadHold t m) => Adjustable t (RequesterInternalT s t request response m) where
205instance (Adjustable t m, MonadHold t m) => Adjustable t (RequesterInternalT s t request response m) where
202− {-# INLINABLE runWithReplace #-}
206+ {-# INLINE runWithReplace #-}
203 runWithReplace (RequesterInternalT a0) a' = RequesterInternalT $ runWithReplace a0 (coerceEvent a')
207 runWithReplace (RequesterInternalT a0) a' = RequesterInternalT $ runWithReplace a0 (coerceEvent a')
204− {-# INLINABLE traverseIntMapWithKeyWithAdjust #-}
208+ {-# INLINE traverseIntMapWithKeyWithAdjust #-}
205 traverseIntMapWithKeyWithAdjust f dm0 dm' = RequesterInternalT $ traverseIntMapWithKeyWithAdjust (coerce . f) dm0 dm'
209 traverseIntMapWithKeyWithAdjust f dm0 dm' = RequesterInternalT $ traverseIntMapWithKeyWithAdjust (coerce . f) dm0 dm'
206− {-# INLINABLE traverseDMapWithKeyWithAdjust #-}
210+ {-# INLINE traverseDMapWithKeyWithAdjust #-}
207 traverseDMapWithKeyWithAdjust f dm0 dm' = RequesterInternalT $ traverseDMapWithKeyWithAdjust (coerce . f) dm0 dm'
211 traverseDMapWithKeyWithAdjust f dm0 dm' = RequesterInternalT $ traverseDMapWithKeyWithAdjust (coerce . f) dm0 dm'
208− {-# INLINABLE traverseDMapWithKeyWithAdjustWithMove #-}
212+ {-# INLINE traverseDMapWithKeyWithAdjustWithMove #-}
209 traverseDMapWithKeyWithAdjustWithMove f dm0 dm' = RequesterInternalT $ traverseDMapWithKeyWithAdjustWithMove (coerce . f) dm0 dm'
213 traverseDMapWithKeyWithAdjustWithMove f dm0 dm' = RequesterInternalT $ traverseDMapWithKeyWithAdjustWithMove (coerce . f) dm0 dm'
211instance (Adjustable t m, MonadHold t m) => Adjustable t (RequesterT t request response m) where
215instance (Adjustable t m, MonadHold t m) => Adjustable t (RequesterT t request response m) where
212− {-# INLINABLE runWithReplace #-}
216+ {-# INLINE runWithReplace #-}
213 runWithReplace (RequesterT a0) a' = RequesterT $ runWithReplace a0 (fmapCheap unRequesterT a')
217 runWithReplace (RequesterT a0) a' = RequesterT $ runWithReplace a0 (fmapCheap unRequesterT a')
214− {-# INLINABLE traverseIntMapWithKeyWithAdjust #-}
218+ {-# INLINE traverseIntMapWithKeyWithAdjust #-}
215 traverseIntMapWithKeyWithAdjust f dm0 dm' = RequesterT $ traverseIntMapWithKeyWithAdjust (\k v -> unRequesterT $ f k v) dm0 dm'
219 traverseIntMapWithKeyWithAdjust f dm0 dm' = RequesterT $ traverseIntMapWithKeyWithAdjust (\k v -> unRequesterT $ f k v) dm0 dm'
216− {-# INLINABLE traverseDMapWithKeyWithAdjust #-}
220+ {-# INLINE traverseDMapWithKeyWithAdjust #-}
217 traverseDMapWithKeyWithAdjust f dm0 dm' = RequesterT $ traverseDMapWithKeyWithAdjust (\k v -> unRequesterT $ f k v) dm0 dm'
221 traverseDMapWithKeyWithAdjust f dm0 dm' = RequesterT $ traverseDMapWithKeyWithAdjust (\k v -> unRequesterT $ f k v) dm0 dm'
218− {-# INLINABLE traverseDMapWithKeyWithAdjustWithMove #-}
222+ {-# INLINE traverseDMapWithKeyWithAdjustWithMove #-}
219 traverseDMapWithKeyWithAdjustWithMove f dm0 dm' = RequesterT $ traverseDMapWithKeyWithAdjustWithMove (\k v -> unRequesterT $ f k v) dm0 dm'
223 traverseDMapWithKeyWithAdjustWithMove f dm0 dm' = RequesterT $ traverseDMapWithKeyWithAdjustWithMove (\k v -> unRequesterT $ f k v) dm0 dm'
221−{-# INLINABLE runWithReplaceRequesterTWith #-}
222−runWithReplaceRequesterTWith :: forall m t request response a b. (Reflex t, MonadHold t m
225− => (forall a' b'. m a' -> Event t (m b') -> RequesterT t request response m (a', Event t b'))
226− -> RequesterT t request response m a
227− -> Event t (RequesterT t request response m b)
228− -> RequesterT t request response m (a, Event t b)
229−runWithReplaceRequesterTWith f (RequesterT a0) a' = RequesterT $ do
233import GHC.Exts (Any)
226import GHC.Exts (Any)
234import Unsafe.Coerce
227import Unsafe.Coerce