37 lines
1.1 KiB
Haskell
37 lines
1.1 KiB
Haskell
-- Copyright © 2025 Hashirama Senju
|
|
|
|
{-
|
|
find dictionaries by using only conduits.
|
|
-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
module Main where
|
|
|
|
import qualified Data.Conduit.Combinators as CC
|
|
import Data.Conduit
|
|
import Data.Text (pack,unpack)
|
|
import System.Environment (getArgs)
|
|
import System.IO (stdout)
|
|
import System.FilePath (takeExtension)
|
|
import Conduit
|
|
|
|
-- | Recursively list all files in the given directory, streaming each file path as UTF-8 bytes to stdout.
|
|
listFiles :: FilePath -> IO ()
|
|
listFiles dir = runConduitRes $
|
|
-- 1) Walk the directory (produces `FilePath`)
|
|
CC.sourceDirectoryDeep False dir
|
|
.| -- 2) Filter *before* converting to Text
|
|
filterC (\fp -> takeExtension fp == ".mdx")
|
|
.| -- 3) Convert to Text, append newline, then encode
|
|
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
|