Add conduitFileStream.hs
This commit is contained in:
parent
711afceeea
commit
b8e476af35
1 changed files with 33 additions and 0 deletions
33
conduitFileStream.hs
Normal file
33
conduitFileStream.hs
Normal 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
|
||||
Loading…
Reference in a new issue