Haskell错误:"缺少附带绑定"和"不在范围内"

ano*_*on1 8 haskell compiler-errors

我创建了一段代码:

intToDigit :: Char -> Int
ord :: Char -> Int
intToDigit c = ord c - ord 'a'
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我收到此错误消息:

ChangeVowels.hs:2:1:`ord'的类型签名缺少附带的绑定

ChangeVowels.hs:4:16:不在范围内:`ord'

ChangeVowels.hs:4:24:不在范围内:`ord'

我尝试过,Import data.char但这也不起作用.

Chr*_*isJ 19

您需要为该函数提供实现ord.在这里,您已经签名ord,但没有实现.

或者你可以使用Haskell自己的ord功能Char.ord.


Pti*_*val 5

删除行:

ord :: Char -> Int  
Run Code Online (Sandbox Code Playgroud)

或者给它一个定义.

将函数命名为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
Run Code Online (Sandbox Code Playgroud)

实际上这不是你定义的......为什么'a'你的代码?