Haskell 哈斯凯尔错误:“;缺少附带的装订”;及;“不在范围内”;

Haskell 哈斯凯尔错误:“;缺少附带的装订”;及;“不在范围内”;,haskell,compiler-errors,Haskell,Compiler Errors,我创建了一段代码,如下所示: intToDigit :: Char -> Int ord :: Char -> Int intToDigit c = ord c - ord 'a' 但是,当我运行它时,会收到以下错误消息: 更改元音。hs:2:1: “ord”的类型签名缺少附带的绑定 更改元音。hs:4:16:不在范围内:`ord' 更改元音。hs:4:24:不在范围内:`ord' 我用导入数据.char尝试了它,但也不起作用。删除行: ord :: Char -> Int

我创建了一段代码,如下所示:

intToDigit :: Char -> Int
ord :: Char -> Int
intToDigit c = ord c - ord 'a'
但是,当我运行它时,会收到以下错误消息:

更改元音。hs:2:1: “ord”的类型签名缺少附带的绑定

更改元音。hs:4:16:不在范围内:`ord'

更改元音。hs:4:24:不在范围内:`ord'

我用导入数据.char尝试了它,但也不起作用。

删除行:

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
digitToInt::Char->Int
指点c
|isDigit c=ord c-ord“0”

|c>='a'&&c='a'&&c您需要为函数
ord
提供一个实现。这里,您已经为
ord
提供了签名,但没有实现


或者您可以使用Haskell自己的
ord
函数,即
Char.ord

注意,大写很重要:您的导入行应该是
import Data.Char
(或者
import Data.Char higing(intToDigit)
)。@Dave或更好的,
import Data.Char(ord)
另外,如果您顺便将函数名小写,以便在类型声明中包含intToDigit,在实现中包含intToDigit,那么您将得到一个附带的yada-yada。我通过艰苦的方式学会了。。。