すみません自己解決しました!
エラーメッセージの英語の読解ミスで、In a case alternative :以下の部分が、具体的に漏れと判断された事例であると認識できていませんでした。
つまりコンパイラは、その部分でまさに
「おまえ、Integerには{0,1,-1}以外の値もあるけどそれについて書いてないよ」
と言ってくれていたわけですね…。試しに
>> :set -Wincomplete-patterns
>> es = \(k :: Integer)-> case signum k of {0 -> 0; 1 -> 1} :: Integer
をghciに通してみると、該当部分の末尾が...p where p is not one of {0, 1}と帰ってきたので気付くことができました。
Haskellには篩型がないので、事後条件がコンパイラにはわからないという事なのでしょう。
つまり
GHCは、signum :: Integer -> Integer の値域が "厳密に{0,1,-1}であること" を知らない
という事です。 組み込み関数だろお前ふざけんな! まあ型横断的な関数なので仕方ない... わけないよ。わからない原因それじゃないし!
とかいう愚痴はさておいて、こういう罠があることは知っておかなくちゃいけないですね。
というわけなので、「その他」を追加するという戦略を安心して取ろうと思います。