[Haskell-beginners] merge error

Hemanth Gunda hemanth.420 at gmail.com
Fri May 18 05:38:46 UTC 2018


Hi Trent,

This works:

merge:: Ord a => [a] -> [a] -> [a]
merge [] [] = []
merge x [] = x
merge [] y = y
merge first@(x:xs) second@(y:ys)
| x <= y = x : merge xs second
| otherwise = y : merge first ys

Difference in the lines

merge x [] = x
merge [] y = y

As the input is of type [a] where a belongs to typeclass Ord, you must pass
x instead of [x].

[x] would work if you tried merge [4] []. but will fail if you tried merge
[4,5] []. because "4,5" isn't of type a.

Regards, Hemanth


On Fri, May 18, 2018 at 10:51 AM trent shipley <trent.shipley at gmail.com>
wrote:

> The below produces an error. And I am very proud that I could use the GHCi
> debugging tools to get this far.
>
> merge [] [] works.
>
> merge [1] [] works.
>
> I don't know why the failing example fails. It should return:
>
> [4,5]
>
> Help to unstuck is appreciated.
>
> :step merge [4,5] []
>
> *** Exception: ex6_8.hs:(12,1)-(16,66): Non-exhaustive patterns in
> function merge
>
> Given:
>
> merge :: Ord a => [a] -> [a] -> [a]
>
> merge [] [] = []
>
> merge [x] [] = [x]
>
> merge [] [y] = [y]
>
> merge first@(x:xs) second@(y:ys) | x <= y     = x : merge xs second
>
>                                  | otherwise  = y : merge first ys
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180518/c533c0f3/attachment-0001.html>


More information about the Beginners mailing list