При первом совпадении шаблона у вас есть только списки, содержащие не менее 3 элементов. Вот почему, когда дубликаты находятся в конце списка, когда вызывается
myCom [4,4]
, он просто использует
myCom ys = ys
и возвращает себя. Вы можете поймать это, определив myCom для списков, по крайней мере, с 2 элементами, как показано ниже (вы все равно не использовали z):
myCom (x:y:ys)
| x == y = myCom ys
| otherwise = x : myCom (y:ys)
myCom ys = ys
Это дает
myCom [1,2,2, 3,4,4] = [1,3]
По-прежнему существует проблема с 3 (нечетным числом) последовательных чисел. Например, мы получаем:
myCom [1,2,2,2] = [1,2]
, но я понимаю, что это желаемое поведение.