Type签名缺少适当的绑定[Haskell]

Nat*_*ski 3 haskell types compilation

我一直在谷歌上寻找答案,甚至在这里问了几个问题.这似乎是一个模棱两可的错误,我无法弄清楚如何在我的实例中解决它.

违规代码如下:

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
Run Code Online (Sandbox Code Playgroud)

确切错误的文本是:

15:1 letterNumber的类型签名缺少附带的绑定.

最初我输入的类型签名是Char - > Int,但是这不起作用(它说了一些关于Eq的东西,但我太新了,Haskell也不能正确地解释它).所以我改变了类型签名以具有Eq类约束.如果有人可以指出什么是错误或解决方法,那将非常感激,因为这是我正在进行的项目的门槛问题.

dav*_*420 5

您提供类型签名letterNumber,但随后提供绑定lettNumber.注意缺少er.

只需重命名lettNumberletterNumber,以匹配类型签名中的拼写.


另外,正确的类型签名letterNumber

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