{-# LANGUAGE FlexibleContexts #-}
-- This example generates two random streams sorted in ascending order and
-- merges them in ascending order, concurrently.
--
-- Compile with '-threaded -with-rtsopts "-N"' GHC options to use the
-- parallelism.
import Data.Word (Word16)
import Streamly.Prelude (SerialT)
import System.Random (getStdGen, randoms)
import qualified Data.List as List
import qualified Streamly.Prelude as Stream
getRandomSorted :: IO (SerialT IO Word16)
getRandomSorted = do
g <- getStdGen
let ls = take 100000 (randoms g) :: [Word16]
return $ Stream.fromList (List.sort ls)
main :: IO ()
main = do
s1 <- getRandomSorted
s2 <- getRandomSorted
Stream.last (Stream.mergeAsyncBy compare s1 s2) >>= print