on master help sign in
Fix examples to use new names
commitdffb02fa9892ca72e36073706d4490a8ee77d770 authorHarendra Kumar <harendra.kumar@gmail.com> dateTue 17 Apr 2018, 15:45 (9 years ago) parent583a48c
7 files changed+27−25
examples/loops.hs+4−4 examples/nested-loops.hs+4−3 examples/parallel-loops.hs+3−3 src/Streamly/Examples/AcidRainGame.hs+1−1 src/Streamly/Examples/CirclingSquare.hs+1−1 src/Streamly/Examples/ListDirRecursive.hs+9−10 src/Streamly/Examples/SearchEngineQuery.hs+5−3
examples/loops.hs+4−4
@@ -26,12 +26,12 @@ main = do
2626
2727 putStrLn $ "\ninterleave:\n"
2828 runSerialT $ do
29− x <- return 0 <> return 1 <=> return 100 <> return 101
29+ x <- (return 0 <> return 1) `interleave` (return 100 <> return 101)
3030 liftIO $ print (x :: Int)
3131
3232 putStrLn $ "\nParallel interleave:\n"
3333 runSerialT $ do
34− x <- return 0 <> return 1 <|> return 100 <> return 101
34+ x <- (return 0 <> return 1) `parmerge` (return 100 <> return 101)
3535 liftIO $ print (x :: Int)
3636
3737 where
@@ -71,12 +71,12 @@ main = do
7171 loopTailA :: Int -> SerialT IO Int
7272 loopTailA x = do
7373 liftIO $ putStrLn "LoopTailA..."
74− return x <| (if x < 3 then loopTailA (x + 1) else empty)
74+ return x `asyncmerge` (if x < 3 then loopTailA (x + 1) else empty)
7575
7676 loopHeadA :: Int -> SerialT IO Int
7777 loopHeadA x = do
7878 liftIO $ putStrLn "LoopHeadA..."
79− (if x < 3 then loopHeadA (x + 1) else empty) <| return x
79+ (if x < 3 then loopHeadA (x + 1) else empty) `asyncmerge` return x
8080
8181-------------------------------------------------------------------------------
8282-- Parallel (fairly scheduled, multi-threaded) stream generator loops
examples/nested-loops.hs+4−3
@@ -1,9 +1,9 @@
1−import Control.Applicative ((<|>), empty)
21import Control.Concurrent (myThreadId)
32import Control.Monad.IO.Class (liftIO)
43import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
54import System.Random (randomIO)
65import Streamly
6+import Streamly.Prelude (nil)
77
88main = runSerialT $ do
99 liftIO $ hSetBuffering stdout LineBuffering
@@ -15,8 +15,9 @@ main = runSerialT $ do
1515
1616 where
1717
18+ loop :: String -> Int -> SerialT IO String
1819 loop name n = do
1920 rnd <- liftIO (randomIO :: IO Int)
2021 let result = (name ++ show rnd)
21− repeat = if n > 1 then loop name (n - 1) else empty
22− in (return result) <|> repeat
22+ repeat = if n > 1 then loop name (n - 1) else nil
23+ in (return result) `parmerge` repeat
examples/parallel-loops.hs+3−3
@@ -1,4 +1,3 @@
1−import Control.Applicative ((<|>))
21import Control.Concurrent (myThreadId, threadDelay)
32import Control.Monad.IO.Class (liftIO)
43import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
@@ -7,14 +6,15 @@ import Streamly
76
87main = runSerialT $ do
98 liftIO $ hSetBuffering stdout LineBuffering
10− x <- loop "A" <|> loop "B"
9+ x <- loop "A" `parmerge` loop "B"
1110 liftIO $ myThreadId >>= putStr . show
1211 >> putStr " "
1312 >> print x
1413
1514 where
1615
16+ loop :: String -> SerialT IO (String, Int)
1717 loop name = do
1818 liftIO $ threadDelay 1000000
1919 rnd <- liftIO (randomIO :: IO Int)
20− return (name, rnd) <|> loop name
20+ return (name, rnd) `parmerge` loop name
src/Streamly/Examples/AcidRainGame.hs+1−1
@@ -28,7 +28,7 @@ acidRain = cycle1 $ liftIO (threadDelay 1000000) >> return (Harm 1)
2828
2929game :: (MonadAsync m, MonadState Int m) => SerialT m ()
3030game = do
31− event <- userAction <|> acidRain
31+ event <- userAction `parmerge` acidRain
3232 case event of
3333 Harm n -> modify $ \h -> h - n
3434 Heal n -> modify $ \h -> h + n
src/Streamly/Examples/CirclingSquare.hs+1−1
@@ -87,4 +87,4 @@ circlingSquare :: IO ()
8787circlingSquare = do
8888 sdlInit
8989 cref <- newIORef (0,0)
90− runSerialT $ liftIO (updateController cref) <|> liftIO (updateDisplay cref)
90+ runSerialT $ liftIO (updateController cref) `parmerge` liftIO (updateDisplay cref)
src/Streamly/Examples/ListDirRecursive.hs+9−10
@@ -1,19 +1,18 @@
1−{-# LANGUAGE FlexibleContexts #-}
2−
31module Streamly.Examples.ListDirRecursive where
42
3+import Control.Monad.IO.Class (liftIO)
54import Path.IO (listDir, getCurrentDir)
65import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
7−import Streamly
6+import Streamly (runAsyncT)
87
8+-- | This example demonstrates that there is little difference between regular
9+-- IO code and concurrent streamly code. You can just remove 'runAsyncT' and
10+-- this is your regular IO code.
911listDirRecursive :: IO ()
1012listDirRecursive = do
11− liftIO $ hSetBuffering stdout LineBuffering
12− runSerialT $ getCurrentDir >>= readdir
13+ hSetBuffering stdout LineBuffering
14+ runAsyncT $ getCurrentDir >>= readdir
1315 where readdir d = do
14− (ds, fs) <- lift $ listDir d
16+ (ds, fs) <- liftIO $ listDir d
1517 liftIO $ mapM_ putStrLn $ map show fs ++ map show ds
16− --foldWith (<>) $ map readdir ds -- serial
17− --foldWith (<=>) $ map readdir ds -- serial interleaved
18− foldWith (<|) $ map readdir ds -- concurrent left biased
19− --foldWith (<|>) $ map readdir ds -- concurrent interleaved
18+ foldMap readdir ds
src/Streamly/Examples/SearchEngineQuery.hs+5−3
@@ -7,13 +7,15 @@ import Network.HTTP.Simple
77searchEngineQuery :: IO ()
88searchEngineQuery = do
99 putStrLn "Using parallel alternative"
10− runSerialT $ google <|> bing <|> duckduckgo
10+ runParallelT $ google <> bing <> duckduckgo
1111
1212 putStrLn "\nUsing parallel applicative zip"
13− runZipAsync $ (,,) <$> pure google <*> pure bing <*> pure duckduckgo
13+ runZipAsync $ (,,) <$> google <*> bing <*> duckduckgo
1414
1515 where
16− get s = liftIO (httpNoBody (parseRequest_ s) >> putStrLn (show s))
16+ get :: IsStream t => String -> t IO ()
17+ google, bing, duckduckgo :: IsStream t => t IO ()
18+ get s = adapt . serially $ liftIO (httpNoBody (parseRequest_ s) >> putStrLn (show s))
1719 google = get "https://www.google.com/search?q=haskell"
1820 bing = get "https://www.bing.com/search?q=haskell"
1921 duckduckgo = get "https://www.duckduckgo.com/?q=haskell"