| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Pipes.Tree
Documentation
descend :: Monad m => TreeT m a -> ListT m (a, Maybe (TreeT m a)) Source #
Descend one level into a TreeT, yielding a list of values and their
possible associated trees.
winnow :: Monad m => TreeT m a -> CondT a m () -> TreeT m a Source #
Given a TreeT, produce another TreeT which yields only those elements
(and sub-trees) matching the given monadic conditional. This conditional
(see CondT) can choose both elements and points of
recursion, making it capable of expressing any tree traversal in the form
of a predicate DSL. This differs from an expression-based traversal, like
XPath or Lens, in that effects in m may be used to guide selection.
For example, to print all Haskell files under the current directory:
let files = winnow (directoryFiles ".") $ do
path <- query
liftIO $ putStrLn $ "Considering " ++ path
when (path `elem` ["./.git", "./dist", "./result"])
prune -- ignore these, and don't recurse into them
guard_ (".hs" `isInfixOf`) -- implicitly references path
runEffect $ for (enumerate (walk files)) $ liftIO . print