1{-# LANGUAGE FlexibleContexts #-}
3module Asyncly.Examples.MergeSortedStreams where
9import qualified Asyncly.Prelude as A
11getSorted :: MonadIO m => AsyncT m Word16
14 let ls = take 100000 (randoms g) :: [Word16]
15 foldMapWith (<>) return (sort ls)
17mergeAsync :: (Ord a, MonadAsync m) => AsyncT m a -> AsyncT m a -> AsyncT m a
23merge :: (Ord a, MonadAsync m) => AsyncT m a -> AsyncT m a -> AsyncT m a
25 a1 <- lift $ A.uncons a
29 b1 <- lift $ A.uncons b
31 Nothing -> return x <> ma
34 then (return y) <> merge (return x <> ma) mb
35 else (return x) <> merge ma (return y <> mb)
37mergeSortedStreams :: IO ()
38mergeSortedStreams = do
39 xs <- toList $ mergeAsync getSorted getSorted
40 putStrLn $ show $ length xs
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list