sha*_*har 4 string haskell typeclass
我是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
Run Code Online (Sandbox Code Playgroud)
这不会运行,因为我的类型类定义是错误的.我有两个字符串,需要返回一个整数,因此我上面写的类型类定义.我还需要做些什么吗?
dav*_*420 11
类型签名应该是
ed :: (Eq a, Integral b) => [a] -> [a] -> b
Run Code Online (Sandbox Code Playgroud)
这是因为您的定义ed包括表达式x == y.x和y两者都具有类型a; 要能够测试它们是否相等,这种类型必须实现Eq类型类,它提供了==和/=运营商.
您收到的错误消息将包括以下内容:
Run Code Online (Sandbox Code Playgroud)Could not deduce (Eq a) arising from a use of `==' from the context (Integral b) bound by the type signature for ed :: Integral b => [a] -> [a] -> b at /home/dave/tmp/so.hs:(2,1)-(5,26) Possible fix: add (Eq a) to the context of the type signature for ed :: Integral b => [a] -> [a] -> b
这是试图告诉你的.
(顺便说一下,当字符串长度不同时,你的代码不处理这种情况.)