gpt4 book ai didi

Haskell:没有因使用 `==' 而导致 (Eq a) 的实例

转载 作者:行者123 更新时间:2023-12-03 13:51:47 26 4
gpt4 key购买 nike

isPalindrome :: [a] -> Bool
isPalindrome xs = case xs of
[] -> True
[x] -> True
a -> (last a) == (head a) && (isPalindrome (drop 1 (take (length a - 1) a)))

main = do
print (show (isPalindrome "blaho"))

结果是
No instance for (Eq a)
arising from a use of `=='
In the first argument of `(&&)', namely `(last a) == (head a)'
In the expression:
(last a) == (head a)
&& (isPalindrome (drop 1 (take (length a - 1) a)))
In a case alternative:
a -> (last a) == (head a)
&& (isPalindrome (drop 1 (take (length a - 1) a)))

为什么会出现这个错误?

最佳答案

您正在比较 a 类型的两个项目使用 == .这意味着 a不能只是任何类型 - 它必须是 Eq 的实例, 作为 == 的类型是 (==) :: Eq a => a -> a -> Bool .

您可以通过添加 Eq 来解决此问题对 a 的约束到你的函数的类型签名:

isPalindrome :: Eq a => [a] -> Bool

顺便说一句,使用 reverse 实现这个功能有一个更简单的方法。 .

关于Haskell:没有因使用 `==' 而导致 (Eq a) 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com