我正在尝试检查 haskell 应用程序中的相等性,该应用程序接受 [a] 类型的 xs,如下所示:
myCompare :: Int -> Int -> [a] -> Int
myCompare pointer x xs = if pointer < length xs
then if xs !! pointer == xs !! (pointer+1)
....
但是,Haskell 遇到了一个问题,即它无法对 xs 数组中的项目进行比较,因为它们可能具有不同的类型。
返回的错误是:
No instance for (Eq a) arising from a use of ‘==’
Possible fix:
add (Eq a) to the context of
the type signature for myCompare :: Int -> Int -> [a] -> Int
我对类型不熟悉,不确定如何转换它 - 有人可以帮助我吗?
最佳答案
只需执行编译器告诉您的操作即可:向函数添加 Eq
约束。
myCompare :: Eq a => Int -> Int -> [a] -> Int
当你编写a
时,你告诉编译器该函数可以操作任何类型;换句话说,这意味着您不对该类型有任何期望。
比较特定类型的两个值不是给定的;它由 Eq
类型类提供。虽然大多数 ADT 可以简单地派生 Eq
来获取该实例,但您仍然需要确保要比较的类型和值实际上具有该实例,这正是约束正在做的事情。
关于haskell - 比较 Haskell 中的不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178893/