【问题标题】:Error tuple: Non type-variable argument in the constraint: Integral (a, a)错误元组:约束中的非类型变量参数:积分(a,a)
【发布时间】:2017-02-08 12:18:50
【问题描述】:

我见过一个这样定义元组类型的例子:

countRepetitions :: (Integral a, Integral (a,a)) => [a] -> a -> (a,a)

但是当我执行代码时会出现以下消息: 约束中的非类型变量参数:Integral (a, a) 如何声明元组类型?

【问题讨论】:

  • “声明元组类型”是什么意思?实际上,这样说很奇怪,因为元组并不是真正的整数:很难将其转换为漂亮的“整数”...
  • 它是not hard,但在这里不是特别有用。

标签: haskell ghci


【解决方案1】:

您无需使用Integral (a, a) 进行约束。约束Integral a 强制类型a 的所有值都为Integral。尝试像这样重写它:

countRepetitions :: Integral a => [a] -> a -> (a,a)

【讨论】:

  • 如果元组的第二个元素是任何类型怎么办?
  • 如果您希望参数是任何类型,请使用不受约束的泛型参数。例如,这使得函数的第二个参数不受约束:countRepetitions :: Integral a => [a] -> b -> (a,a)。但是,返回 (a,b) 的类型,您将返回完全未知的内容作为第二个参数,这可能不是您想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多