{-# LANGUAGE RecordWildCards #-}
module TraverseDir (traverseDirectoryWith) where
import Data.Foldable (traverse_)
import Control.Monad.RWS
import System.Directory (listDirectory)
import System.FilePath ((</>))
import App
traverseDirectoryWith :: MyApp s () -> MyApp s ()
traverseDirectoryWith app = do
path <- gets curPath
content <- liftIO $ listDirectory path
traverse_ (go path) content
where
go path name = do
modify (newPath $ path </> name)
app
modify (restorePath $ path)
newPath path st @ AppState {..} = st {curDepth = curDepth + 1,
curPath = path}
restorePath path st @ AppState {..} = st {curDepth = curDepth - 1,
curPath = path}