[Haskell-cafe] Pattern matching error

Philip Weaver philip.weaver at gmail.com
Thu Dec 6 13:03:02 EST 2007


If you add a third pattern, you can see exactly what it's failing to match:

    kmerge x = error (show x)

In order to do this, you just need to add Show constraints for a and b in
the type of kmerge:

   kmerge :: (Show a, Show b, Eq a) => [(a,[b])]->[(a,[b])]

You'll find that the pattern that it's failing to match is:

   [('b',[5,4]),('b',[1]),('b',[6])]

Because you combined 5 and 4 and passed that on to your recursive 'kmerge'
call.  Your patterns only cover the case where there is exactly one element
in the list.

- Phil

On Dec 6, 2007 9:39 AM, georg86 <georg_straube at web.de> wrote:

>
> Hello!
> I need to write a function which should is supposed to merge multiple
> entries with the same
> key (out of a sorted key-value-list) into one single entry.
> However, I keep getting a pattern matching error.
>
> (For example, for input [('b',[5]),('b',[4]),('b',[1]),('b',[6])]:
> "Program error: pattern match failure: kgroup
> [('b',[5,4]),('b',[1]),('b',[6])]")
>
> Thank you very much for your help.
>
> kmerge::Eq a => [(a,[b])]->[(a,[b])]
>
> kmerge [] = []
>
> kmerge ((x,[y]):[]) = [(x,[y])]
>
> kmerge ((x,[y]):(u,[v]):xs) | x == u = kmerge ((x,[y,v]):xs)
>                                     | otherwise = (x,[y]):(u,[v]):kmerge
> xs
> --
> View this message in context:
> http://www.nabble.com/Pattern-matching-error-tf4957268.html#a14196413
> Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20071206/271b6656/attachment.htm


More information about the Haskell-Cafe mailing list