[x] means a list containing the element x

xs in general is only a variable named xs, and in particular could be a list; in this case, if you write
first@(x:xs)
you mean that first is a list, its "head" is x and xs is its "tail", i.e. all the elements of the list first following x.

For example if the arguments of merge are [1,2,4] and [3,6], then
first = [1,2,4]
x=1
xs = [2,4]
second=[3,6]
y=3
ys=[6]

Note that [1,2,4] could not be pattern-matchd with [x]. [6] could (because contains just one element)

Il ven 18 mag 2018, 08:04 trent shipley <trent.shipley@gmail.com> ha scritto:
Thanks to all. I used Mukesh's suggestion. 

I am still not clear on:

why [x] /= xs
why first == first@(x:xs), especially weather the variable declarations are considered names for the same thing.

On Thu, May 17, 2018 at 10:39 PM Hemanth Gunda <hemanth.420@gmail.com> wrote:
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@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@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners