[Haskell-cafe] search Data.Tree.Zipper

MightyByte mightybyte at gmail.com
Mon Mar 8 13:45:49 EST 2010


I haven't tested it, but I think you're looking for something like this:

searchTree2 :: (a -> Bool) -> TreeLoc a -> Maybe (TreeLoc a)
searchTree2 pred rootLoc =
  if pred (getLabel rootLoc)
    then Just rootLoc
    else firstChild rootLoc >>= siblings
  where siblings loc = searchTree2 pred loc `mplus`
                                (searchTree2 pred =<< right loc)


On Mon, Mar 8, 2010 at 1:11 PM, Jian Fan <abemud at gmail.com> wrote:
> Hi,
>
> There doesn't seem to be a function to search the tree so
> I come up with following function:
>
> searchTree :: (a -> Bool) -> TreeLoc a -> Maybe (TreeLoc a)
> searchTree pred rootLoc =
>  if pred (getLabel rootLoc) then
>    Just rootLoc
>    else case firstChild rootLoc of
>      Just loc -> case searchTree pred loc of
>        Just loc -> Just loc
>        Nothing -> case right loc of
>          Just rLoc -> searchTree pred rLoc
>          Nothing -> Nothing
>      Nothing -> Nothing
>
> Which feels quite ugly. Any suggestions? Thanks.
>
> Jian
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


More information about the Haskell-Cafe mailing list