Ошибки Haskell: «отсутствует сопутствующая привязка» и «не входит в область действия» - PullRequest
7 голосов
/ 20 марта 2011

Я создал этот фрагмент кода:

intToDigit :: Char -> Int
ord :: Char -> Int
intToDigit c = ord c - ord 'a'

Однако, когда я запускаю его, я получаю это сообщение об ошибке:

ChangeVowels.hs: 2: 1: В сигнатуре типа для `ord 'отсутствует сопровождающая привязка

ChangeVowels.hs: 4: 16: вне области действия: `ord '

ChangeVowels.hs: 4: 24: вне области действия: `ord '

Я пробовал это с Import data.char, но это тоже не работает.

Ответы [ 2 ]

17 голосов
/ 20 марта 2011

Вам необходимо предоставить реализацию для функции ord. Здесь вы задали подпись для ord, но не реализовали.

Или вы можете использовать собственную функцию ord Haskell, то есть Char.ord.

5 голосов
/ 20 марта 2011

Удалите строку:

ord :: Char -> Int  

Или дайте ей определение.

И неправильно называть вашу функцию intToDigit, хотя она уже используется в Data.Char для выполнениянапротив того, что вы делаете.

Ваша функция - Data.Char.digitToInt, и ее реализация также работает с шестнадцатеричным:

digitToInt :: Char -> Int
digitToInt c
 | isDigit c            =  ord c - ord '0'
 | c >= 'a' && c <= 'f' =  ord c - ord 'a' + 10
 | c >= 'A' && c <= 'F' =  ord c - ord 'A' + 10
 | otherwise            =  error ("Char.digitToInt: not a digit " ++ show c) -- sigh

На самом деле это не то, что вы определили ... почему 'a' в вашем коде?

...