2013-03-30 6 views
3

Я искал ответ, чтобы найти ответ, и даже задал несколько вопросов, заданных здесь. Кажется, что это неоднозначная ошибка, и я не могу понять, как ее решить в моем случае.Подпись типа не соответствует соответствующей привязке [Haskell]

Нарушитель код ниже:

pos :: (Eq a) => [a] -> a -> Int 
pos [] _ = -1 
pos (x:xs) y 
| not $ elem y (x:xs) = -1 
| x == y = 0 
| otherwise = 1 + pos xs y 

-- Get the same element from another range as one element of the first range. 
refPos :: (Eq a) => [a] -> [b] -> a -> b 
refPos r1 r2 e1 = r2 !! (r1 `pos` e1) 

letterNumber :: (Eq a, Char a) => a -> Int 
lettNumber x = refPos ['a'..'z'] [0..25] x 

Текст точной ошибки:

15: 1 Тип подписи для letterNumber не хватает сопроводительной связывания.

Первоначально подписи типа, которые я поставил, были Char -> Int, но это не сработало (это что-то говорит об эквалайзере, но я слишком новый, слишком Haskell, чтобы правильно его интерпретировать). Поэтому я изменил подпись типа, чтобы иметь ограничение класса Eq. Если кто-то может указать, что является неправильным или обходным путем, было бы очень полезно, поскольку это проблема с дверью, к проекту, над которым я работаю.

+2

Эта ошибка почти всегда опечатка в имени функции в моем опыте! Иногда возникает ошибка, потому что я забыл написать определение функции. – AndrewC

ответ

5

Вы предоставляете подпись типа для letterNumber, но затем предоставьте обязательную связь для lettNumber. Обратите внимание на недостающие er.

Просто переименуйте lettNumber в letterNumber, чтобы соответствовать орфографии в типе.


Кроме того, правильный тип подписи для letterNumber является

letterNumber :: Char -> Int 
+0

Вот почему я должен использовать IDE. Печально, что я часами смотрел техническую документацию и даже исправлял эту функцию и не нашел этого. Мне плохо, когда я отправляю его сейчас. Спасибо. –

+1

Я снова и снова делал глупый череп с или без IDE. Единственное, что глупо, это сдаться. Вот моя установка IDE в vim. https://gist.github.com/gertcuykens/1171609 –

Смежные вопросы