无法将类型"整数"与"整数"匹配

  • 本文关键字:整数 匹配 类型 haskell
  • 更新时间 :
  • 英文 :


我开始了我的Haskell之旅,遇到了我的第一个问题:

在我的Haskell脚本中:
myList = [1, 2, 3, 4, 5, 6, 7]
average ns = sum ns `div` length ns

当我在ghci repl时,我得到两个不同的结果:

  • 如果输入> average [1, 2, 3, 4],则得到2的期望值
  • 但如果我尝试使用myList和类型> average myList,我得到错误"无法匹配类型' Integer '与' Int ' ">

我理解(至少我认为我这样做)没有变量的概念,所以myList只是一个返回"硬编码"的函数。每次调用时都列出。

我怎么能使它工作,为什么它是这样的行为?

length将返回一个Int,而sum将返回一个与列表中项目类型相同的数字(这里可能是Integer)。

可以使用fromIntegral :: (Integral a, Num b) => a -> bIntegral类型的数字转换为任何Num类型,例如将Int转换为Integer

因此我们可以这样实现:

average :: Integral a => [a] -> a
average ns = sum ns `div`fromIntegral (length ns)
因为你使用了div :: Integral a => a -> a -> a因此,将两个操作数和结果约束为相同的类型,该类型应该是Integral类型类的成员。

相关内容

  • 没有找到相关文章

最新更新