{-# LANGUAGE OverloadedStrings #-} module Main (main) where import Control.Monad.IO.Class (liftIO) import Criterion.Main import Data.DirStream import qualified Filesystem.Path as F import Pipes (every, for, runEffect) import Pipes.Safe (runSafeT) import System.Directory.Recursive dirstreamGet :: F.FilePath -> IO () dirstreamGet fp = runSafeT $ runEffect $ for (every (descendentOf fp)) (liftIO . (\x -> pure $ x `seq` ())) discard :: Functor f => f a -> f () discard = fmap (\x -> x `seq` ()) main :: IO () main = defaultMain [ bgroup "." [ bench "getDirRecursive" $ nfIO (discard <$> getDirRecursive ".") , bench "DirStream" $ nfIO (dirstreamGet ".") ] ]