
If you compile with -Wall, you get the following
foo.hs:2:1: warning: [-Wincomplete-patterns]
Pattern match(es) are non-exhaustive
In an equation for ‘merge’:
Patterns not matched:
[] (_:_:_)
(_:_:_) []
|
2 | merge [] [] = []
| ^^^^^^^^^^^^^^^^...
That is to say, you never match if there is an empty list and a list of 2
or more.
Try this:
merge :: Ord a => [a] -> [a] -> [a]
merge [] ys = ys
merge xs [] = xs
merge first@(x:xs) second@(y:ys) | x <= y = x : merge xs second
| otherwise = y : merge first ys
On Thu, May 17, 2018 at 10:21 PM trent shipley
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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners