The compiler is telling me that this function has Non-exhaustive patterns, but every scenarios are covered, aren't they?
allNeighbors :: Ord v => Graph v -> [v] -> [v] -> [v]
allNeighbors graph (x:xs) neighborsList
| length (x:xs) <= 0 = neighborsList
| length (x:xs) == 1 = neighborsList ++ (neighbors x graph)
| length (x:xs) > 1 = allNeighbors graph xs (neighborsList ++ (neighbors x graph))