如何理解这种类型类错误,告诉我我使用了错误的类型?

凯里饶

这是我计算数字列表的平均值的功能

arithMean :: (Fractional a) => [a] -> a
arithMean list = (foldr (+) 0 list)/ (length list)

但是,它在下面引发了一个错误

HigherOrder.hs:10:39: error:
? Couldn't match expected type ‘a’ with actual type ‘Int’
  ‘a’ is a rigid type variable bound by
    the type signature for:
      arithMean :: forall a. Fractional a => [a] -> a
    at HigherOrder.hs:9:1-39
? In the second argument of ‘(/)’, namely ‘(length list)’
  In the expression: (foldr (+) 0 list) / (length list)
  In an equation for ‘arithMean’:
      arithMean list = (foldr (+) 0 list) / (length list)
? Relevant bindings include
    list :: [a] (bound at HigherOrder.hs:10:11)
    arithMean :: [a] -> a (bound at HigherOrder.hs:10:1)

关于此错误,我对为什么迫使我将“列表”更改为[Int]感到非常困惑,我认为无论它是哪种类型,它都应该起作用

此外,我认为当我尝试使用“长度”函数时可能发生了某些事情,因为当我在下面编写此代码时,它可以工作

arithMean :: (Fractional a) => [a] -> a
arithMean list = (foldr (+) 0 list)
威廉·范昂塞姆

该类型的(/) :: Fractional a => a -> a -> a手段的分子和分母需要既需要具有相同的Fractional类型。

length :: [a] -> Int但是将可折叠对象映射到Int一个Int不是一个Fractional类型。

您可以fromIntegral :: (Integral a, Num b) :: a -> b在此处使用将转换IntNumtypeclass成员的类型。

arithMean :: (Fractional a, Foldable f) => f a -> a
arithMean list = sum list / fromIntegral (length list)

除了在foldr (+) 0 list这里使用,我们可以sum :: (Foldable f, Num a) => f a -> a在这里使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何构建类以适应这种类型的 gui 系统?

为什么我的Xcode编译器告诉我即使使用类也使用值类型?

如何在 python 3.0 中修复这种类型的错误?每当我使用传递参数(dict{})时,它都会显示这种类型的错误“NameError: name 'P' is not defined”

为什么我的计划正显示出这种类型的错误,而迭代ArrayList的使用foreach循环?

为什么我的错误注释了这种类型签名却没有破坏事情?

我在计算日期时使用了错误的变量类型吗?

ffmpeg依赖错误告诉我什么,如何解决?

Spark告诉我功能列错误

CMake告诉我什么(Windows错误)?

我如何实现这种类型的底片颤振

我如何在webgl中捕获这种类型的#define

我应该如何解析这种类型的字节?

无法摆脱这种类型的错误

对子代使用类型“ React.ReactNode”时出现错误。我应该使用哪种类型?

类方法告诉我,我又使用了1个pos。争论比需要的,但我没有

谁能告诉我这种效果是如何实现的?

我的python代码给出了这种类型的错误“ IndentationError:期望缩进的块”。给出任何解决方案

这个错误试图告诉我什么,我该如何解决?

我如何强制执行这种类型检查?代码允许返回或传递任何类型

谁能告诉我为什么我在python中使用gmtime和mktime,得到错误的结果?

为什么sudo告诉我密码错误?

Vue.js不会告诉我错误的行号

git push faid 并告诉我用户名是错误的

告诉我Anacron任务中的错误在哪里?

使用 -> 访问 struct 的属性但编译器错误告诉我使用 ->?

EXC_BAD_ACCESS 如果发生错误,告诉我们如何尝试捕获

有人能告诉我如何摆脱这个错误吗

c中的分段错误。谁能告诉我如何解决它?

它告诉我在 php 上使用 <td style="color:...;"> 时犯了一个错误