on master help sign in
Fix, delete, move examples
commita61b30ba71250e53017db0cd18ed8fc1a56f525c authorHarendra Kumar <harendra.kumar@gmail.com> dateThu 24 Aug 2017, 03:45 (9 years ago) parent02a745f
8 files changed+4−127
test/alternative.hs → examples/alternative.hs+1−1 test/applicative.hs → examples/applicative.hs+3−3 test/logged.hs → examples/logged.hs test/1-event.hs−29 test/2-gather.hs−8 test/3-async.hs−24 test/3-sample.hs−48 test/gather.hs−14
test/alternative.hs → examples/alternative.hsrenamed+1−1
@@ -6,7 +6,7 @@ import Control.Applicative
66
77import Asyncly
88
9−main = wait_ $ threads 1 $ do
9+main = runAsyncly $ do
1010 liftIO $ hSetBuffering stdout LineBuffering
1111 mainThread <- liftIO myThreadId
1212 liftIO $ putStrLn $ "Main thread: " ++ show mainThread
test/applicative.hs → examples/applicative.hsrenamed+3−3
@@ -7,11 +7,11 @@ import Asyncly
77
88main = do
99 hSetBuffering stdout LineBuffering
10− xs <- wait $ threads 5 $ do
10+ xs <- runAsyncly $ do
1111 x <- (,) <$> (event 1 <|> event 2) <*> (event 3 <|> event 4)
12− --x <- (,) <$> choose [1,2] <*> choose [3,4]
12+ --x <- (,) <$> (for [1,2] return) <*> (for [3,4] return)
1313 liftIO $ putStrLn $ show x
1414 return x
1515 putStrLn $ show xs
1616 where
17− event n = async $ liftIO $ (do putStrLn ("event" ++ show n); return n :: IO Int)
17+ event n = liftIO $ (do putStrLn ("event" ++ show n); return n :: IO Int)
test/logged.hs → examples/logged.hsrenamed

The content is the same.

test/1-event.hsdeleted−29
@@ -1,29 +0,0 @@
1−{-# LANGUAGE ScopedTypeVariables #-}
2−
3−import Control.Applicative
4−import Control.Concurrent
5−import Control.Concurrent.STM
6−import Control.Monad.State
7−import Data.IORef
8−
9−import Strands.Context
10−
11−f :: StateT Context IO String
12−f = do
13− setData "x"
14− Just x <- getData
15− return x
16−
17−runEvent :: forall m a. (Alternative m, MonadIO m) => StateT Context m a -> m a
18−runEvent t = do
19− zombieChan <- liftIO $ atomically newTChan
20− pendingRef <- liftIO $ newIORef []
21− credit <- liftIO $ newIORef maxBound
22−
23− (r, _) <- runStateT t $ initContext
24− (empty :: m a) zombieChan pendingRef credit
25− return r
26−
27−main = do
28− r <- runEvent f
29− putStrLn r
test/2-gather.hsdeleted−8
@@ -1,8 +0,0 @@
1−import Asyncly
2−import Control.Monad.IO.Class (liftIO)
3−
4−main = do
5− xs <- wait $ do
6− liftIO $ putStrLn "hello"
7− return 5
8− print xs
test/3-async.hsdeleted−24
@@ -1,24 +0,0 @@
1−import Control.Concurrent (threadDelay, myThreadId)
2−import Control.Monad.IO.Class (liftIO)
3−import System.Random (randomIO)
4−import System.IO
5−
6−import Asyncly
7−
8−main = do
9− hSetBuffering stdout LineBuffering
10− xs <- wait $ threads 4 $ do
11− liftIO $ hSetBuffering stdout LineBuffering
12− mainThread <- liftIO myThreadId
13− liftIO $ putStrLn $ "Main thread: " ++ show mainThread
14− x <- liftIO (randomIO :: IO Int)
15− liftIO $ putStrLn $ show x
16−
17− y <- liftIO (randomIO :: IO Int)
18−
19− liftIO $ threadDelay 1000000
20− evThread <- liftIO myThreadId
21− liftIO $ putStrLn $ "Event thread: " ++ show evThread
22− liftIO $ putStrLn $ show y
23− return (x, y)
24− putStrLn $ show xs
test/3-sample.hsdeleted−48
@@ -1,48 +0,0 @@
1−{-# LANGUAGE FlexibleContexts #-}
2−import Control.Applicative
3−import Control.Concurrent (threadDelay, myThreadId)
4−import Control.Monad.IO.Class (liftIO, MonadIO)
5−import System.Random (randomIO)
6−import System.IO
7−import Control.Monad (forever, mzero)
8−import Control.Monad.Trans.Control (MonadBaseControl)
9−import Data.IORef
10−import Control.Monad.Catch (MonadThrow)
11−
12−import Asyncly
13−
14−main = wait_ $ threads 0 $ do
15− liftIO $ hSetBuffering stdout LineBuffering
16− mainThread <- liftIO myThreadId
17− liftIO $ putStrLn $ "Main thread: " ++ show mainThread
18−
19− x <- sample (randomIO :: IO Int) 1000000
20− {-
21− evThread <- liftIO myThreadId
22− liftIO $ putStrLn $ "\nX Event thread: " ++ show evThread
23− liftIO $ putStrLn $ "x = " ++ (show x)
24− -}
25−
26− y <- sample (randomIO :: IO Int) 1000000
27−
28− -- liftIO $ threadDelay 10000000
29− evThread <- liftIO myThreadId
30− --liftIO $ putStrLn $ "\nY Event thread: " ++ show evThread
31− liftIO $ putStrLn $ "(x,y) = " ++ (show (x,y))
32−
33−sample :: (Eq a, MonadIO m, MonadBaseControl IO m, MonadThrow m)
34− => IO a -> Int -> AsyncT m a
35−sample action interval = do
36− v <- liftIO action
37− prev <- liftIO $ newIORef v
38− async (return v) <|> loop action prev
39− where loop act prev = loop'
40− where loop' = do
41− liftIO $ threadDelay interval
42− v' <- liftIO $ readIORef prev
43− v <- liftIO act
44− if v /= v' then do
45− liftIO (writeIORef prev v)
46− async (return v) <|> loop'
47− else do
48− loop'
test/gather.hsdeleted−14
@@ -1,14 +0,0 @@
1−import Control.Concurrent (threadDelay, myThreadId)
2−import Control.Monad.IO.Class (liftIO)
3−import System.Random (randomIO)
4−import System.IO
5−
6−import Asyncly
7−
8−--- Check space leaks
9−
10−main = do
11− x <- wait $ do
12− y <- gather $ each [1..10]
13− liftIO $ print y
14− print x