[Haskell-cafe] search Data.Tree.Zipper

Jian Fan abemud at gmail.com
Mon Mar 8 13:11:33 EST 2010


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.


More information about the Haskell-Cafe mailing list