on master help sign in
Add examples
commitb347f8feb6d6abe26538bfdeb4a7cfe32c571785 authorHarendra Kumar <harendra.kumar@gmail.com> dateFri 14 Jul 2017, 11:09 (9 years ago) parente5da40c
4 files changed+68
examples/loop.hs+16 examples/map-reduce.hs+10 examples/nested-loops.hs+22 examples/parallel-loops.hs+20
examples/loop.hsnew file+16
@@ -0,0 +1,16 @@
1+import Control.Applicative ((<|>))
2+import Control.Concurrent (threadDelay)
3+import Control.Monad.IO.Class (liftIO)
4+import System.Random (randomIO)
5+import Asyncly
6+
7+main = wait_ $ do
8+ x <- loop
9+ liftIO $ print x
10+
11+ where
12+
13+ loop = do
14+ liftIO $ threadDelay 1000000
15+ x <- liftIO (randomIO :: IO Int)
16+ return x <|> loop
examples/map-reduce.hsnew file+10
@@ -0,0 +1,10 @@
1+import Control.Applicative ((<|>), empty)
2+import Control.Monad.IO.Class (liftIO)
3+import Data.List (sum)
4+import Asyncly
5+
6+main = do
7+ squares <- wait $ do
8+ x <- foldl (<|>) empty $ map return [1..100]
9+ return (x * x)
10+ print . sum $ squares
examples/nested-loops.hsnew file+22
@@ -0,0 +1,22 @@
1+import Control.Applicative ((<|>), empty)
2+import Control.Concurrent (myThreadId)
3+import Control.Monad.IO.Class (liftIO)
4+import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
5+import System.Random (randomIO)
6+import Asyncly
7+
8+main = wait_ $ do
9+ liftIO $ hSetBuffering stdout LineBuffering
10+ x <- loop "A " 2
11+ y <- loop "B " 2
12+ liftIO $ myThreadId >>= putStr . show
13+ >> putStr " "
14+ >> print (x, y)
15+
16+ where
17+
18+ loop name n = do
19+ rnd <- liftIO (randomIO :: IO Int)
20+ let result = (name ++ show rnd)
21+ repeat = if n > 1 then loop name (n - 1) else empty
22+ in (return result) <|> repeat
examples/parallel-loops.hsnew file+20
@@ -0,0 +1,20 @@
1+import Control.Applicative ((<|>))
2+import Control.Concurrent (myThreadId, threadDelay)
3+import Control.Monad.IO.Class (liftIO)
4+import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
5+import System.Random (randomIO)
6+import Asyncly
7+
8+main = wait_ $ do
9+ liftIO $ hSetBuffering stdout LineBuffering
10+ x <- loop "A" <|> loop "B"
11+ liftIO $ myThreadId >>= putStr . show
12+ >> putStr " "
13+ >> print x
14+
15+ where
16+
17+ loop name = do
18+ liftIO $ threadDelay 1000000
19+ rnd <- liftIO (randomIO :: IO Int)
20+ return (name, rnd) <|> loop name