我一直在搜索,找到答案,甚至來到這裏提出的幾個問題。這似乎是一個模棱兩可的錯誤,我無法弄清楚在我的例子中如何解決它。類型簽名缺少適當的綁定[Haskell]
有問題的代碼如下:
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
確切的錯誤的文本是:
15:letterNumber 1所述的類型簽名缺少伴隨結合。
原來我放的類型簽名是Char-> Int,但那不起作用(它說了一些關於Eq的內容,但我也是新的,Haskell也正確地解釋它)。所以我改變了類型簽名以具有Eq類的約束。如果有人能指出什麼是錯誤的或解決方法,那將是非常感謝,因爲這是我正在開展的一個項目的門檻問題。
這個錯誤幾乎總是在我的經驗,一個函數名稱的拼寫錯誤!這很偶然,因爲我忘了寫函數定義。 – AndrewC