Удалите строку:
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'
в вашем коде?