Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. streamScanM :: (MonadState s m,
  2.                 HasStriotState s beta,
  3.                 MonadIO m,
  4.                 MonadBaseControl IO m)
  5.             => (beta -> alpha -> beta)
  6.             -> beta
  7.             -> Stream alpha
  8.             -> m (Stream beta)
  9. streamScanM _  _ [] = return []
  10. streamScanM mf acc (Event eid (Just m) t v : r)
  11.     = accValue .= acc
  12.     >> return []
  13. streamScanM mf acc (Event eid m t (Just v) : r)
  14.     = unsafeInterleaveLiftedIO
  15.     $ (Event eid m t (Just newacc) :)
  16.    <$> streamScanM mf newacc r
  17.         where newacc = mf acc v
  18. streamScanM mf acc (Event eid m t Nothing : r)
  19.     = unsafeInterleaveLiftedIO
  20.     $ (Event eid m t Nothing :)
  21.    <$> streamScanM mf acc r
  22.  
  23.  
  24. unsafeInterleaveLiftedIO :: MonadBaseControl IO m => m a -> m a
  25. unsafeInterleaveLiftedIO = liftBaseOp_ unsafeInterleaveIO
  26.  
  27.  
  28. myOp :: (MonadState s m,
  29.         HasStriotState s Int,
  30.         MonadIO m,
  31.         MonadBaseControl IO m) => Stream String -> m (Stream Int)
  32. myOp = streamScanM (\acc _ -> succ acc) 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement