Ошибка неполных шаблонов при определении варианта папки

Меня попросили сделать функцию, которая работает как foldr, но с непустыми списками, которая работает следующим образом: foldr1 f [x1,x2...xn] = f x1 (f x2...(f xn-1 xn)...).

Поэтому я определил это так:

foldr1 f [x] = x
foldr1 f (x:xs) = f x (foldr1 f xs)
foldr1 f _ = undefined

И я все еще получаю сообщение об ошибке «Неисчерпывающие шаблоны в функции foldr1», несмотря на то, что покрываю все возможности. Что я делаю не так?


person Jaime Fernández    schedule 15.01.2019    source источник
comment
Я согласен, что похоже, что вы рассмотрели все возможные случаи, но разве это не именно то, что делает foldr1? (PS не является ли ошибка неисчерпывающих шаблонов ошибкой времени выполнения, а не ошибкой времени компиляции? Если да, то какой ввод вы даете, когда получаете ошибку?)   -  person Robin Zigmond    schedule 15.01.2019
comment
Да, только что проверил и узнал, что foldr1 на самом деле существующая функция. Это часть старого экзаменационного вопроса, который я задаю для практики. Ввод, который я пробовал, это foldr1 (+) [1,2,3,4]   -  person Jaime Fernández    schedule 15.01.2019
comment
Как ты это делаешь? Вы используете GHCI? Вы загружаете это в файл или печатаете напрямую? Я не могу воспроизвести эту проблему.   -  person AJF    schedule 15.01.2019
comment
@AJFarmar Держу пари, это оно! хороший улов. вы должны сделать это ответом. (или, может быть, найти дубликат...?) закрыл его. :)   -  person Will Ness    schedule 15.01.2019
comment
Запуск на WinGHCi   -  person Jaime Fernández    schedule 15.01.2019