Почему GHC жалуется на неисчерпывающие закономерности?

Когда я компилирую следующий код с GHC (используя-Wall флаг):

module Main where

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show)

insert :: (Ord a) => a -> Tree a -> Tree a
insert x EmptyTree = Node x EmptyTree EmptyTree
insert x (Node a left right)
    | x == a = Node a left right
    | x < a = Node a (insert x left) right
    | x > a = Node a left (insert x right)

main :: IO()
main = do
    let nums = [1..10]::[Int]
    print . foldr insert EmptyTree $ nums

GHC жалуется, что сопоставление с образцом вinsert не является исчерпывающим:

test.hs|6| 1:
||     Warning: Pattern match(es) are non-exhaustive
||              In an equation for `insert': Patterns not matched: _ (Node _ _ _)

Почему GHC выдает это предупреждение? Совершенно очевидно, что шаблон, на который жалуется GHC, обрабатывается вinsert x (Node a left right).

Ответы на вопрос(3)

Ваш ответ на вопрос