@@ -87,9 +87,9 @@ runRequesterT :: forall t request response m a
8787 => RequesterT t request response m a
8888 -> Event t (ResponseData (PrimState m) response)
8989 -> 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
9191 (_, tg) <- RequesterInternalT ask
92− result <- (unsafeCoerce :: RequesterInternalT FakeRequesterStatePhantom t request response m a -> RequesterInternalT s t request response m a) a
92+ result <- a
9393 let responses = fforMaybe wrappedResponses $ \(ResponseData tg' m) -> case tg `geq` tg' of
9494 Nothing -> trace ("runRequesterT: bad TagGen: expected " <> show tg <> " but got " <> show tg') Nothing --TODO: Warn somehow
9595 Just Refl -> Just m
@@ -106,14 +106,18 @@ instance MonadTrans (RequesterT t request response) where
106106-- The 'Tag' keys will be used to return the responses to the same place the
107107-- requests were issued.
108108withRequesterInternalT
109− :: ( Reflex t
109+ :: forall t m request response a.
110+ ( Reflex t
110111 , PrimMonad m
111112 , MonadFix m
112113 )
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))
114115 -> m a
115−withRequesterInternalT f = withTagGen $ \tg -> do
116− rec let RequesterInternalT a = f requests
116+withRequesterInternalT f = do
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
117121 ((responses, result), requests) <- runEventWriterT $ runReaderT a (fanTag responses, tg)
118122 pure result
119123
@@ -199,36 +203,25 @@ instance (Reflex t, PrimMonad m) => Requester t (RequesterInternalT s t request
199203 tellEvent $ fmapCheap (NonEmptyDeferred.singleton . RequestEnvelope Nothing) e
200204
201205instance (Adjustable t m, MonadHold t m) => Adjustable t (RequesterInternalT s t request response m) where
202− {-# INLINABLE runWithReplace #-}
206+ {-# INLINE runWithReplace #-}
203207 runWithReplace (RequesterInternalT a0) a' = RequesterInternalT $ runWithReplace a0 (coerceEvent a')
204− {-# INLINABLE traverseIntMapWithKeyWithAdjust #-}
208+ {-# INLINE traverseIntMapWithKeyWithAdjust #-}
205209 traverseIntMapWithKeyWithAdjust f dm0 dm' = RequesterInternalT $ traverseIntMapWithKeyWithAdjust (coerce . f) dm0 dm'
206− {-# INLINABLE traverseDMapWithKeyWithAdjust #-}
210+ {-# INLINE traverseDMapWithKeyWithAdjust #-}
207211 traverseDMapWithKeyWithAdjust f dm0 dm' = RequesterInternalT $ traverseDMapWithKeyWithAdjust (coerce . f) dm0 dm'
208− {-# INLINABLE traverseDMapWithKeyWithAdjustWithMove #-}
212+ {-# INLINE traverseDMapWithKeyWithAdjustWithMove #-}
209213 traverseDMapWithKeyWithAdjustWithMove f dm0 dm' = RequesterInternalT $ traverseDMapWithKeyWithAdjustWithMove (coerce . f) dm0 dm'
210214
211215instance (Adjustable t m, MonadHold t m) => Adjustable t (RequesterT t request response m) where
212− {-# INLINABLE runWithReplace #-}
216+ {-# INLINE runWithReplace #-}
213217 runWithReplace (RequesterT a0) a' = RequesterT $ runWithReplace a0 (fmapCheap unRequesterT a')
214− {-# INLINABLE traverseIntMapWithKeyWithAdjust #-}
218+ {-# INLINE traverseIntMapWithKeyWithAdjust #-}
215219 traverseIntMapWithKeyWithAdjust f dm0 dm' = RequesterT $ traverseIntMapWithKeyWithAdjust (\k v -> unRequesterT $ f k v) dm0 dm'
216− {-# INLINABLE traverseDMapWithKeyWithAdjust #-}
220+ {-# INLINE traverseDMapWithKeyWithAdjust #-}
217221 traverseDMapWithKeyWithAdjust f dm0 dm' = RequesterT $ traverseDMapWithKeyWithAdjust (\k v -> unRequesterT $ f k v) dm0 dm'
218− {-# INLINABLE traverseDMapWithKeyWithAdjustWithMove #-}
222+ {-# INLINE traverseDMapWithKeyWithAdjustWithMove #-}
219223 traverseDMapWithKeyWithAdjustWithMove f dm0 dm' = RequesterT $ traverseDMapWithKeyWithAdjustWithMove (\k v -> unRequesterT $ f k v) dm0 dm'
220224
221−{-# INLINABLE runWithReplaceRequesterTWith #-}
222−runWithReplaceRequesterTWith :: forall m t request response a b. (Reflex t, MonadHold t m
223− , MonadFix m
224− )
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
230− pure undefined
231−
232225{-
233226import GHC.Exts (Any)
234227import Unsafe.Coerce