Итак, я понимаю, что это возможный дублирующий вопрос, так как о переполнении стека сообщалось о ряде этих ошибок, но ни одно из решений, похоже, не относится к моей проблеме.
Итак, у меня есть следующая функция:
elementAt' :: Integral b => [a] -> b -> a
elementAt' [x:_] 1 = x
elementAt' [x:xs] y = elementAt' xs yminus1
where yminus1 = y - 1
Если вам интересно, это проблема 3 из 99 Задачи Хаскелла .Цель функции - взять в качестве входных данных список и индекс и вернуть значение по этому индексу (начиная с 1).Я не хочу, чтобы решение проблемы, если бы я сделал, я мог бы просто посмотреть на предоставленные.Но я получаю ошибку, которую не понимаю.Я использую eclipseFP, плагин eclipse для haskell, и он подчеркивает части «[x: _]» и «[x: xs]» со следующей ошибкой:
Couldn't match type `a' with `[a]'
`a' is a rigid type variable bound by
the type signature for elementAt' :: Integral b => [a] -> b -> a
Во всехпотоки, обсуждающие эту ошибку, на которую я смотрел, обычно возникают, когда кто-то пытается дать неправильный вывод чему-то, что ожидает определенный тип.Например, возвращая длину чего-либо (который имеет тип Int) тому, что должно быть типом переменной «Num a».
Но в моем случае я даже не предоставляю тип для переменной a.Это должно быть в состоянии быть НИЧЕГО, верно?Так почему я получаю эту ошибку?Если бы я понял, почему я получаю ошибку, я мог бы ее исправить, но я просто не понимаю.
Может кто-нибудь объяснить мне, почему я получаю эту ошибку?
Ваша помощьвысоко ценится, спасибо.-Asaf
Редактировать: Каждый ответ, предоставленный до сих пор, является правильным, спасибо всем за полезную информацию.Я собираюсь выбрать тот, который мне кажется наиболее понятным (хотя мне нужно подождать 5 минут, чтобы сделать это).