on master help sign in
Use static argument transformation for bindWith
5a21de2Harendra Kumar
src/Asyncly/AsyncT.hs+8−5
@@ -172,11 +172,14 @@ bindWith
172 -> AsyncT m a
172 -> AsyncT m a
173 -> (a -> AsyncT m b)
173 -> (a -> AsyncT m b)
174 -> AsyncT m b
174 -> AsyncT m b
175+bindWith k m f = go m
176+ where
177+ go (AsyncT g) =
175−bindWith k (AsyncT m) f = AsyncT $ \_ stp yld ->
178+ AsyncT $ \_ stp yld ->
176− let run x = (runAsyncT x) Nothing stp yld
179+ let run x = (runAsyncT x) Nothing stp yld
177− yield a _ Nothing = run $ f a
180+ yield a _ Nothing = run $ f a
178− yield a _ (Just r) = run $ f a `k` (bindWith k r f)
181+ yield a _ (Just r) = run $ f a `k` (go r)
179− in m Nothing stp yield
182+ in g Nothing stp yield
180
183
181instance Monad m => Monad (AsyncT m) where
184instance Monad m => Monad (AsyncT m) where
182 return a = AsyncT $ \ctx _ yld -> yld a ctx Nothing
185 return a = AsyncT $ \ctx _ yld -> yld a ctx Nothing