Когда я скомпилирую следующий код с 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)
.