haskell - 比较 Haskell 中的不同类型

标签 haskell ghci

我正在尝试检查 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/

相关文章:

haskell - 构造函数中的不可见/隐藏字段

haskell - 当 foldr 与幺半群没有任何关系时, foldMap 怎么能做和 foldr 一样的事情呢?

networking - 如何将 Unix POSIX 文件描述符或标准输入句柄转换为套接字?

haskell - 不确定如何获得正确的评估顺序

haskell - 无法创建 Num 的派生实例

haskell - Haskell 中的远程生成过程

list - Haskell 递增元组的最后一个元素

haskell - 不明确的出现 `Just'

haskell - GHCi - 第二次运行时跳过断点

haskell - 列表理解不以方括号结尾,控制台卡住