Haskell 错误元组:约束中的非类型变量参数:整数(a,a)

Haskell 错误元组:约束中的非类型变量参数:整数(a,a),haskell,ghci,Haskell,Ghci,我看到了一个示例,其中您以这种方式定义了元组类型: countRepetitions :: (Integral a, Integral (a,a)) => [a] -> a -> (a,a) 但当我执行代码时,会出现以下消息: 约束中的非类型变量参数:Integral(a,a) 如何声明元组类型?您不需要使用整数(a,a)进行约束。约束Integral a强制类型a的所有值为Integral。试着像这样重写它: countRepetitions::积分a=>[a]->a->(

我看到了一个示例,其中您以这种方式定义了元组类型:

countRepetitions :: (Integral a, Integral (a,a)) => [a] -> a -> (a,a)
但当我执行代码时,会出现以下消息: 约束中的非类型变量参数:
Integral(a,a)

如何声明元组类型?

您不需要使用
整数(a,a)
进行约束。约束
Integral a
强制类型
a
的所有值为
Integral
。试着像这样重写它:

countRepetitions::积分a=>[a]->a->(a,a)

你说的“声明元组类型”是什么意思?事实上,这样说很奇怪,因为元组不是真正的整数:很难将其转换为一个好的“整数”…它是,但在这里不是特别有用。如果元组的第二个元素是任何类型的呢?如果您希望参数是任何类型的,请使用无约束的泛型参数。例如,这使得函数的第二个参数不受约束:
countRepetitions::Integral a=>[a]>b->(a,a)
。但是,返回一种类型的
(a,b)
,即返回完全未知的内容作为第二个参数,可能不是您想要的。