我对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 == y
。 x
和 y
都具有 a
类型;为了能够测试它们是否相等,该类型必须实现 Eq
类型类,它提供 ==
和 /=
运算符。您收到的错误消息将包含如下内容:
这是试图告诉你这一点。
(顺便说一句,当字符串具有不同长度时,您的代码无法处理这种情况。)
关于string - Haskell 中的类型类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13592832/