{-# LANGUAGE FlexibleContexts #-} module Streamly.Examples.ListDirRecursive where import Path.IO (listDir, getCurrentDir) import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering)) import Streamly listDirRecursive :: IO () listDirRecursive = do liftIO $ hSetBuffering stdout LineBuffering runStreamT $ getCurrentDir >>= readdir where readdir d = do (ds, fs) <- lift $ listDir d liftIO $ mapM_ putStrLn $ map show fs ++ map show ds --foldWith (<>) $ map readdir ds -- serial --foldWith (<=>) $ map readdir ds -- serial interleaved foldWith (<|) $ map readdir ds -- concurrent left biased --foldWith (<|>) $ map readdir ds -- concurrent interleaved