在Haskell中使用括号

l--*_*''' 1 haskell

我收到此错误:

<interactive>:145:29:
    Could not deduce (Integral ([a0] -> Int))
      arising from a use of ‘fromIntegral’
    from the context (Num ([a] -> a), Fractional a)
      bound by the inferred type of
               meanList :: (Num ([a] -> a), Fractional a) => [a] -> a
      at <interactive>:145:5-50
    The type variable ‘a0’ is ambiguous
    In the second argument of ‘(/)’, namely ‘(fromIntegral length x)’
    In the expression: (sum x) / (fromIntegral length x)
    In an equation for ‘meanList’:
        meanList x = (sum x) / (fromIntegral length x)
Run Code Online (Sandbox Code Playgroud)

以上错误由以下方式生成:

meanList x = (sum x) / (fromIntegral length x)
Run Code Online (Sandbox Code Playgroud)

但是,将此更新为:

let meanList x = sum x / fromIntegral (length x)
Run Code Online (Sandbox Code Playgroud)

一切都很好.

括号如何在Haskell中工作?

Sar*_*rah 13

函数应用程序是左关联的.换一种说法,

fromIntegral length x = (fromIntegral length) x
Run Code Online (Sandbox Code Playgroud)

因此错误,Could not deduce (Integral ([a0] -> Int))因为长度的类型确实没有实例Integral.

  • @Yuck你可以把我的freenode作为srhb抓住我,因为我认为这不是这种对话的相关场所.还有:一切.:) (5认同)