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