Add conduitFileStream.hs

This commit is contained in:
千住柱間 2025-05-29 20:57:40 +00:00
commit b8e476af35

33
conduitFileStream.hs Normal file
View file

@ -0,0 +1,33 @@
-- Copyright © 2025 Hashirama Senju
{-
conduits seems more polished than bare pipes
-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Conduit (runConduitRes, (.|))
import Data.Conduit.Filesystem (sourceDirectoryDeep)
import qualified Data.Conduit.Combinators as CC
import Data.Text (pack)
import System.Environment (getArgs)
import System.IO (stdout)
-- | Recursively list all files in the given directory, streaming each file path as UTF-8 bytes to stdout.
listFiles :: FilePath -> IO ()
listFiles dir =
runConduitRes $
sourceDirectoryDeep False dir .|
CC.map (\fp -> pack fp <> "\n") .|
CC.encodeUtf8 .|
CC.sinkHandle stdout
-- | Entry point: use first CLI argument as directory, defaulting to current directory.
main :: IO ()
main = do
args <- getArgs
let targetDir = case args of
(d:_) -> d
[] -> "."
listFiles targetDir