不完全なパターンについての警告(-fwarn-incomplete-patterns)

不完全なパターンについての警告
GHC に不完全なパターンがあった場合警告する -fwarn-incomplete-patterns というオプションがあります。
【例】

test []           = ""
test (a:b:c:rest) = show a ++ show b ++ show c ++ test rest

-fwarn-incomplete-patterns オプションを付けない場合。

PS C:\card> ghci test.hs
Main> test [1,2,3]
"123"
Main> test [1,2,3,4,5]
"123*** Exception: test.hs:(1,0)-(2,58): Non-exhaustive patterns in function test

3に満たない長さが残った場合該当するパターンがないのです。
-fwarn-incomplete-patterns というオプションを付けると警告が出ます。

PS C:\card> ghci -fwarn-incomplete-patterns test.hs
GHCi, version 6.10.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( test.hs, interpreted )

test.hs:1:0:
    Warning: Pattern match(es) are non-exhaustive
             In the definition of `test':
                 Patterns not matched:
                     [_]
                     [_, _]
Ok, modules loaded: Main.

リストの要素がひとつのときとふたつのときにマッチしないよ、って言ってるようです。

test []           = ""
test [a]          = show a             -- 要素がひとつのときを追加
test [a,b]        = show a ++ show b   -- 要素がふたつのときを追加
test (a:b:c:rest) = show a ++ show b ++ show c ++ test rest

これで警告も消え、エラーもでなくなりました。

PS C:\card> ghci -fwarn-incomplete-patterns test.hs
GHCi, version 6.10.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( test.hs, interpreted )
Ok, modules loaded: Main.

Main> test [1,2,3,4,5]
"12345"
Main> test [1]
"1"

オプションはソースの先頭に書けるようです。
4.1.2. ソースファイル中のコマンド行オプション

{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
test []           = ""
test [a]          = show a             -- 要素がひとつのときを追加
test [a,b]        = show a ++ show b   -- 要素がふたつのときを追加
test (a:b:c:rest) = show a ++ show b ++ show c ++ test rest