Я искал ответ, чтобы найти ответ, и даже задал несколько вопросов, заданных здесь. Кажется, что это неоднозначная ошибка, и я не могу понять, как ее решить в моем случае.Подпись типа не соответствует соответствующей привязке [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. Если кто-то может указать, что является неправильным или обходным путем, было бы очень полезно, поскольку это проблема с дверью, к проекту, над которым я работаю.
Эта ошибка почти всегда опечатка в имени функции в моем опыте! Иногда возникает ошибка, потому что я забыл написать определение функции. – AndrewC