hxt-9.1.0: src/Control/Arrow/NTreeEdit.hs
-- ------------------------------------------------------------
{- |
Module : Control.Arrow.NTreeEdit
Copyright : Copyright (C) 2011 Uwe Schmidt
License : MIT
Maintainer : Uwe Schmidt (uwe\@fh-wedel.de)
Stability : experimental
Portability: portable
arrows for efficient editing of rose trees
-}
-- ------------------------------------------------------------
module Control.Arrow.NTreeEdit
where
import Control.Arrow
import Control.Arrow.ArrowIf
import Control.Arrow.ArrowList
import Control.Arrow.ListArrow
import Data.Maybe
import Data.Tree.NTree.TypeDefs
import Data.Tree.NTree.Edit
-- ------------------------------------------------------------
-- | Edit parts of a rose tree
--
-- The subtrees to be modified are selected by the first part of the IfThen pairs
-- The modification by the second part
editNTreeA :: [IfThen (LA (NTree b) c) (LA (NTree b) (NTree b))] ->
LA (NTree b) (NTree b)
editNTreeA cs = arrL $ editNTreeBottomUp ef
where
ef = listToMaybe . (runLA . foldr (\ (g :-> h) -> ifA g (listA h)) none $ cs)
fmapNTreeA :: (b -> Maybe b) -> LA (NTree b) (NTree b)
fmapNTreeA f = arr $ mapNTree' f
-- eof ------------------------------------------------------------