@@ -34,6 +34,9 @@ import Reflex.Dom.Builder.Immediate
3434import Reflex.Dom.Builder.InputDisabled
3535import Reflex.Dom.Builder.Static
3636import Reflex.Host.Class
37+import Reflex.Requester.Base
38+import Data.IntMap.Strict (IntMap)
39+import qualified Data.IntMap.Strict as IntMap
3740
3841import qualified GHCJS.DOM.Document as Document
3942import qualified GHCJS.DOM.Node as Node
@@ -156,15 +159,17 @@ instance (Prerender js t m, Monad m, Reflex t, Semigroup w) => Prerender js t (E
156159 tellEvent w
157160 pure a
158161
159−-- TODO
160−--instance (Prerender js t m, Monad m) => Prerender js t (RequesterT t request response m) where
161−-- type Client (RequesterT t request response m) = RequesterT t request response (Client m)
162−-- prerender server client = mdo
163−-- response :: Event t (RequesterData response) <- requesting request
164−-- x <- lift $ prerender (runRequesterT server response) (runRequesterT client response)
165−-- let (a, request') = splitDynPure x
166−-- request = switch $ current request' :: Event t (RequesterData request)
167−-- pure a
162+instance (Prerender js t m, MonadFix m, Reflex t) => Prerender js t (RequesterT t request response m) where
163+ type Client (RequesterT t request response m) = RequesterT t request response (Client m)
164+ prerender server client = mdo
165+ let fannedResponses = fanInt responses
166+ withFannedResponses :: forall m' a. Monad m' => RequesterT t request response m' a -> Int -> m' (a, Event t (IntMap (RequesterData request)))
167+ withFannedResponses w selector = do
168+ (x, e) <- runRequesterT w (selectInt fannedResponses selector)
169+ pure (x, fmapCheap (IntMap.singleton selector) e)
170+ (result, requestsDyn) <- fmap splitDynPure $ lift $ prerender (withFannedResponses server 0) (withFannedResponses client 1)
171+ responses <- fmap (fmapCheap unMultiEntry) $ requesting' $ fmapCheap multiEntry $ switch $ current requestsDyn
172+ pure result
168173
169174instance (Prerender js t m, Monad m, Reflex t, MonadFix m, Group q, Additive q, Query q) => Prerender js t (QueryT t q m) where
170175 type Client (QueryT t q m) = QueryT t q (Client m)