Haskell Non-exhaustive patterns : <p>The compiler is telling me that this function has Non-exhaustive patterns, but every scenarios are covered, aren't they?  </p>

<pre><code>allNeighbors :: Ord v =&gt; Graph v -&gt; [v] -&gt; [v] -&gt; [v]
allNeighbors graph (x:xs) neighborsList
                   | length (x:xs) &lt;= 0 = neighborsList
                   | length (x:xs) == 1 = neighborsList ++ (neighbors x graph)
                   | length (x:xs) &gt; 1 = allNeighbors graph xs (neighborsList ++ (neighbors x graph))
</code></pre>
