我对haskell非常陌生,并试图实现一个小而简单的函数,该函数接受两个字符串并告诉我同一位置相同字符的数量。

ed :: (Integral b) => [a] -> [a] -> b
ed _ [] = 0
ed [] _ = 0
ed [] [] = 0
ed (x:xs) (y:ys)
    | x == y = 1 + ed xs ys
    | otherwise = ed xs ys

这不会运行,因为我的类型类定义是错误的。我有两个字符串,需要返回一个整数,因此是我上面写的类型类定义。还有什么我需要做的吗?

最佳答案

类型签名应该是

ed :: (Eq a, Integral b) => [a] -> [a] -> b

这是因为您对 ed 的定义包括表达式 x == yxy 都具有 a 类型;为了能够测试它们是否相等,该类型必须实现 Eq 类型类,它提供 ==/= 运算符。

您收到的错误消息将包含如下内容:



这是试图告诉你这一点。

(顺便说一句,当字符串具有不同长度时,您的代码无法处理这种情况。)

关于string - Haskell 中的类型类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13592832/

10-11 12:24