Loading...
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -Wno-deprecations #-}

module Main (main) where

import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))

import qualified Streamly.Data.Fold as Fold
import qualified Streamly.Data.Stream.Prelude as Stream
-- import qualified Streamly.Internal.Data.Stream as Stream
-- import qualified Streamly.Internal.Data.Unfold as Unfold (either, nil)
import qualified Streamly.Internal.FileSystem.Dir as Dir

-- | List the current directory recursively using concurrent processing
main :: IO ()
main = do
    hSetBuffering stdout LineBuffering
    Stream.fold (Fold.drainMapM print)
        -- $ Stream.unfoldIterateDfs unfoldOne
        -- $ Stream.unfoldIterateBfs unfoldOne
        -- $ Stream.unfoldIterateBfsRev unfoldOne
        -- $ Stream.concatIterateDfs streamOneMaybe
        -- $ Stream.concatIterateBfs streamOneMaybe
        -- $ Stream.concatIterateBfsRev streamOneMaybe
        -- $ Stream.concatIterateWith Stream.append streamOne
        -- $ Stream.mergeIterateWith Stream.interleave streamOne
        $ Stream.parConcatIterate id streamOne
        -- $ Stream.parConcatIterate (Stream.interleaved True) streamOne
        -- $ Stream.parConcatIterate (Stream.ordered True) streamOne
        $ Stream.fromPure (Left ".")

    where

    -- unfoldOne = Unfold.either Dir.eitherReaderPaths Unfold.nil
    -- streamOneMaybe = either (Just . Dir.readEitherPaths) (const Nothing)
    streamOne = either Dir.readEitherPaths (const Stream.nil)