Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- streamScanM :: (MonadState s m,
- HasStriotState s beta,
- MonadIO m,
- MonadBaseControl IO m)
- => (beta -> alpha -> beta)
- -> beta
- -> Stream alpha
- -> m (Stream beta)
- streamScanM _ _ [] = return []
- streamScanM mf acc (Event eid (Just m) t v : r)
- = accValue .= acc
- >> return []
- streamScanM mf acc (Event eid m t (Just v) : r)
- = unsafeInterleaveLiftedIO
- $ (Event eid m t (Just newacc) :)
- <$> streamScanM mf newacc r
- where newacc = mf acc v
- streamScanM mf acc (Event eid m t Nothing : r)
- = unsafeInterleaveLiftedIO
- $ (Event eid m t Nothing :)
- <$> streamScanM mf acc r
- unsafeInterleaveLiftedIO :: MonadBaseControl IO m => m a -> m a
- unsafeInterleaveLiftedIO = liftBaseOp_ unsafeInterleaveIO
- myOp :: (MonadState s m,
- HasStriotState s Int,
- MonadIO m,
- MonadBaseControl IO m) => Stream String -> m (Stream Int)
- myOp = streamScanM (\acc _ -> succ acc) 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement