[Haskell-beginners] Non exhaustive pattern match not flagged?

Henk-Jan van Tuyl hjgtuyl at chello.nl
Mon Oct 17 17:53:38 CEST 2011


On Mon, 17 Oct 2011 17:39:49 +0200, Hugo Ferreira <hmf at inescporto.pt>  
wrote:

> f :: [a] -> [b] -> Int
> --f [] _  = error "undefined for empty array"
> f _ []  = error "undefined for empty array"
> f (_:xs) (_:ys) = length xs + length ys
>
> I get a warning:
>
>   Warning: Pattern match(es) are non-exhaustive
>               In an equation for `f': Patterns not matched: [] (_ : _)
>
> as expected. But for:
>
> bigrams :: [a] -> [[a]]
> --bigrams [] = []
> bigrams [_] = []
> bigrams xs = take 2 xs : bigrams (tail xs)
>
> I don't. Why is the first predicate not detected as missing?

The pattern in the line
   bigrams xs = take 2 xs : bigrams (tail xs)
matches any list, even empty lists

Regards,
Henk-Jan van Tuyl


-- 
http://Van.Tuyl.eu/
http://members.chello.nl/hjgtuyl/tourdemonad.html
--



More information about the Beginners mailing list