
Thanks for all the good explanations! I was misdirected by the fact that
the warning location was on the empty case, but based on descriptions I
think I understand why now.
I find it interesting that there is a bit of a conflict between "good
practice" heuristics:
1. Use -Wall (to eliminate questionable code that triggers warnings), and
2. Avoid _ in patterns in favor of explicit statement of the cases.
So it would appear that the advice (per Kim-Ee) to add an "otherwise" as a
third guard allows me to satisfy the compiler while documenting to the
human reader that the definition is really complete without it.
Thanks,
-jn-
On Tue, Feb 10, 2015 at 9:52 AM, Kim-Ee Yeoh
On Tue, Feb 10, 2015 at 7:58 PM, Joel Neely
wrote: sumDigits (n:ns) | n < 10 = n + sumDigits ns | n >= 10 = r + sumDigits (q : ns) where (q, r) = n `quotRem` 10
To reiterate what Mike and Brandon just said, it's not that both the [] and (n:ns) cases have not been covered. They have.
It's that the (n:ns) case hasn't been covered completely because of the guards.
This will work:
sumDigits (n:ns) | n < 10 = n + sumDigits ns | otherwise = r + sumDigits (q : ns)
As will this:
sumDigits (n:ns) | n < 10 = n + sumDigits ns | n >= 10 = r + sumDigits (q : ns) | otherwise = error "will never fire, only to suppress spurious warning"
There's also -fno-warn-incomplete-patterns.
-- Kim-Ee
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Beauty of style and harmony and grace and good rhythm depend on simplicity. - Plato