我正在尝试检查haskell应用程序中的相等性,它接受类型为[a]的xs,如下所示:
myCompare :: Int -> Int -> [a] -> Int
myCompare pointer x xs = if pointer < length xs
then if xs !! pointer == xs !! (pointer+1)
....
Run Code Online (Sandbox Code Playgroud)
但是,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
Run Code Online (Sandbox Code Playgroud)
我不熟悉各种类型,我不确定我怎么能投这个 - 有人能帮我借这个吗?
只需执行编译器告诉您的操作:Eq为您的函数添加约束.
myCompare :: Eq a => Int -> Int -> [a] -> Int
Run Code Online (Sandbox Code Playgroud)
在编写时a,告诉编译器该函数可以在任何类型上运行; 换句话说,这意味着你不期望任何类型的东西.
比较特定类型的两个值不是给定的; 它是由Eq类型类提供的.虽然大多数ADT可以简单地派生Eq来获取该实例,但您仍需要确保您要比较的类型值实际上具有该实例,而这正是约束正在执行的操作.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |