「不可能」な場合でも、Haskell で常に徹底的なパターン マッチを行うことをお勧めしますか?
たとえば、次のコードでは、foldr の「accumulator」でパターン マッチングを行っています。アキュムレータを作成するため、アキュムレータの内容を完全に制御できます (入力として渡されるのではなく、関数内に構築されます)。したがって、特定のパターンが決して一致してはならないことを知っています。「パターン一致は網羅的ではありません」というエラーが発生しないように努める場合は、「このパターンは発生しないはずです」というメッセージとともに単純にエラーになるパターン一致を配置します。C# の assert によく似ています。そこで他にやることは思いつきません。
この状況で推奨されるプラクティスとその理由は何ですか?
コードは次のとおりです。
gb_groupBy p input = foldr step [] input
where
step item acc = case acc of
[] -> [[item]]
((x:xs):ys) -> if p x item
then (item:x:xs):ys
else [item]:acc
一致しないパターン (インタープリターによって報告される) は次のとおりです。
警告: パターン マッチは網羅的ではありません 代替ケース: パターンがマッチしません: [] : _