以下代码:
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没有递归。
答案 0 :(得分:4)
这是因为你正在使用mod
。 mod
的定义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 Prelude,mod'
。
或者,如果您只想进行整数除法,则可以将函数的签名更改为
{{1}}
或类似。