searchNodeFrom :: DevGraphNavigator a => (LNode DGNodeLab -> Bool) -> a
               -> Node -> Maybe (a, LNode DGNodeLab)
searchNodeFrom p dgnav n =
    let (dgnav', lbln, ledgs) = followIncoming dgnav n
    in if p lbln then Just (dgnav', lbln)
       else firstMaybe (searchNodeFrom p dgnav') $ map linkSource ledgs
searchNodeFrom :: DevGraphNavigator a => (LNode DGNodeLab -> Bool) -> a
               -> Node -> Maybe (a, LNode DGNodeLab)
searchNodeFrom p dgnav n =
    let (dgnav', lbln, ledgs) = followIncoming dgnav n
    in if p lbln then Just (dgnav', lbln)
       else firstMaybe (searchNodeFrom p dgnav') $ map linkSource ledgs
searchNodeFrom p dgnav n =
    let (dgnav', lbln, ledgs) = followIncoming dgnav n
    in if p lbln then Just (dgnav', lbln)
       else firstMaybe (searchNodeFrom p dgnav') $ map linkSource ledgs