Получение неисчерпывающего исключения из шаблона по методу - PullRequest
0 голосов
/ 28 марта 2019

Я получаю non-exhaustive pattern исключение для следующего метода:

 groups::[Int]->[[Int]]
 groups ls=go ls [] [] where

        go [] small big=small:big
        go (x:xs) (y:ys) big | x==y = go xs (x:y:ys) big
                             | otherwise = go xs [] ((y:ys):big)

Что я хочу сделать, это: учитывая массив [1,2,3,3,4,4,4,1] Я хочу разбить его в списке последовательных дубликатов: [[1],[2],[3,3],[4,4,4],[1]].

Я использую 2 аккумуляторы, один для текущего формирующего списка, а другой для большого.

Я не могу использовать wild-card ни для списка big, ни для small, поскольку единственной необычной ситуацией является пустой список ввода.

1 Ответ

1 голос
/ 28 марта 2019

Вы не учли что-то вроде go (x:xs) [] big;единственный случай, когда второй аргумент может быть пустым списком, также требует, чтобы первый аргумент также был пустым списком.

    go [] small big=small:big
    go (x:xs) (y:ys) big | x==y = go xs (x:y:ys) big
                         | otherwise = go xs [] ((y:ys):big)
    go (x:xs) [] big = ???
...