@@ -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