on master help sign in
rename the runner APIs
commit17b30bafb7813e6f6c4f546ec3048da3d33c4d14 authorHarendra Kumar <harendra.kumar@gmail.com> dateWed 9 Aug 2017, 17:30 (9 years ago) parent504800b
3 files changed+31−31
benchmark/Main.hs+21−20 src/Asyncly.hs+2−2 src/Asyncly/RunAsync.hs+8−9
benchmark/Main.hs+21−20
@@ -3,17 +3,18 @@ module Main where
33
44import Criterion.Main (defaultMain, bgroup, bench, nfIO)
55import Control.Exception (assert)
6+import Control.Monad.IO.Class (MonadIO (liftIO))
67--
78-- import Fusion as F hiding ((&))
89import Data.Function ((&))
910
10−import Data.Conduit as C
11−import Data.Conduit.Combinators as C
12−import Pipes as P
11+import qualified Data.Conduit as C
12+import qualified Data.Conduit.Combinators as C
13+import qualified Pipes as P
1314import qualified Pipes.Prelude as P
1415import qualified Streaming.Prelude as Str
1516import qualified System.IO.Streams as IOS
16−import Conduit.Simple as S
17+import qualified Conduit.Simple as S
1718
1819-- Transient
1920import Control.Monad (guard)
@@ -21,11 +22,11 @@ import Control.Applicative (Alternative)
2122import Data.IORef (IORef, newIORef, writeIORef)
2223import Data.Atomics (atomicModifyIORefCAS)
2324import System.IO.Unsafe (unsafePerformIO)
24−import Transient.Internals as T
25−import Transient.Indeterminism as T
25+import qualified Transient.Internals as T
26+import qualified Transient.Indeterminism as T
2627
27−import Data.Machine as M
28−import Asyncly as A
28+import qualified Data.Machine as M
29+import qualified Asyncly as A
2930
3031main :: IO ()
3132main = do
@@ -63,13 +64,13 @@ drop num x = do
6364 guard mn
6465 return x
6566
66−tmap :: (a -> Int) -> a -> TransIO Int
67+tmap :: (a -> Int) -> a -> T.TransIO Int
6768tmap = Main.map
6869
69−tfilter :: (a -> Bool) -> a -> TransIO a
70+tfilter :: (a -> Bool) -> a -> T.TransIO a
7071tfilter = Main.filter
7172
72−tdrop :: Int -> Int -> TransIO Int
73+tdrop :: Int -> Int -> T.TransIO Int
7374tdrop = Main.drop
7475
7576transient_basic :: IO Int
@@ -86,19 +87,19 @@ transient_basic = T.keep' $ T.threads 0 $ do
8687 assert (Prelude.length xs == 499000) $
8788 T.exit (Prelude.length xs)
8889
89−amap :: (a -> Int) -> a -> AsynclyT IO Int
90+amap :: (a -> Int) -> a -> A.AsynclyT IO Int
9091amap = Main.map
9192
92−afilter :: (a -> Bool) -> a -> AsynclyT IO a
93+afilter :: (a -> Bool) -> a -> A.AsynclyT IO a
9394afilter = Main.filter
9495
95−adrop :: Int -> Int -> AsynclyT IO Int
96+adrop :: Int -> Int -> A.AsynclyT IO Int
9697adrop = Main.drop
9798
9899asyncly_basic :: IO Int
99100asyncly_basic = do
100101 writeIORef count 0
101− xs <- wait $ do
102+ xs <- A.toList $ do
102103 A.each [1..1000000 :: Int]
103104 >>= afilter even
104105 >>= amap (+1)
@@ -122,11 +123,11 @@ machines_basic = do
122123pipes_basic :: IO Int
123124pipes_basic = do
124125 xs <- P.toListM $ P.each [1..1000000]
125− >-> P.filter even
126− >-> P.map (+1)
127− >-> P.drop 1000
128− >-> P.map (+1)
129− >-> P.filter (\x -> x `mod` 2 == 0)
126+ P.>-> P.filter even
127+ P.>-> P.map (+1)
128+ P.>-> P.drop 1000
129+ P.>-> P.map (+1)
130+ P.>-> P.filter (\x -> x `mod` 2 == 0)
130131 assert (Prelude.length xs == 499000) $
131132 return (Prelude.length (xs ::[Int]))
132133
src/Asyncly.hs+2−2
@@ -125,8 +125,8 @@ module Asyncly
125125 , AsyncT
126126
127127 -- * Run
128− , wait
129− , wait_
128+ , runAsyncly
129+ , toList
130130-- , threads
131131 , each
132132
src/Asyncly/RunAsync.hs+8−9
@@ -14,8 +14,8 @@
1414-- Portability : GHC
1515--
1616module Asyncly.RunAsync
17− ( wait
18− , wait_
17+ ( runAsyncly
18+ , toList
1919 , AsynclyT
2020-- , threads
2121 , each
@@ -76,9 +76,9 @@ getContext lref = do
7676
7777-- | Run an 'AsynclyT m' computation, wait for it to finish and discard the
7878-- results.
79−{-# INLINABLE wait_ #-}
80−wait_ :: forall m a. (MonadAsync m, MonadCatch m) => AsynclyT m a -> m ()
81−wait_ (AsynclyT m) = do
79+{-# INLINABLE runAsyncly #-}
80+runAsyncly :: (MonadAsync m, MonadCatch m) => AsynclyT m a -> m ()
81+runAsyncly (AsynclyT m) = do
8282 ctx <- liftIO $ getContext Nothing
8383 _ <- runStateT (run m) ctx
8484 return ()
@@ -90,11 +90,11 @@ wait_ (AsynclyT m) = do
9090
9191data Step a r = Stop | Done a | Yield a r
9292
93−{-# INLINABLE wait #-}
9493-- | Run an 'AsynclyT m' computation and collect the results generated by each
9594-- thread of the computation in a list.
96−wait :: forall m a. (MonadAsync m, MonadCatch m) => AsynclyT m a -> m [a]
97−wait (AsynclyT m) = liftIO (getContext Nothing) >>= run m
95+{-# INLINABLE toList #-}
96+toList :: (MonadAsync m, MonadCatch m) => AsynclyT m a -> m [a]
97+toList (AsynclyT m) = liftIO (getContext Nothing) >>= run m
9898
9999 where
100100
@@ -111,7 +111,6 @@ wait (AsynclyT m) = liftIO (getContext Nothing) >>= run m
111111 Stop -> return []
112112 Done x -> return (x : [])
113113
114−-- scatter
115114{-# INLINABLE each #-}
116115each :: MonadAsync m => [a] -> AsynclyT m a
117116each xs = foldr (<|>) empty $ map return xs