Haskell - 定义unSum x =(y + y`mod`2 + 2)/ 2所需的积分浮点实例,其中y = x *(x + 1)/ 2

时间:2013-11-02 05:15:33

标签: haskell

以下代码:

unSum :: Float -> Float
unSum x = (y + y`mod`2 + 2) / 2
        where
        y = x*(x+1) / 2
当我尝试将其加载到WinHugs 98中时,

给了我这个错误:

Hugs> :load "D:\\kram\\unSumme2.hs"
ERROR file:.\unSumme2.hs:2 - Instance of Integral Float required for definition of unSumme2

这是什么的本质,我该怎么做?无论如何,我现在不知道如果它服务于我的porpuse,我想计算不均匀数字的总和,直到x没有递归。

1 个答案:

答案 0 :(得分:4)

这是因为你正在使用modmod的定义class (Real a, Enum a) => Integral a where [...] div, mod :: a -> a -> a [...] n `mod` d = r where (q,r) = divMod n d

a

换句话说,它期望Float是数字类型类Integral,它只包含整数。

如果您想坚持使用Data.Fixed,请尝试使用unSum :: Int -> Int 中的Standard Preludemod'

或者,如果您只想进行整数除法,则可以将函数的签名更改为

{{1}}

或类似。