2013-11-02 22 views
1

以下代碼:Haskell的 - 爲unSum X =的定義所要求的積分浮法的實例(Y + y`mod`2 + 2)/ 2,其中Y = X *(X + 1)/ 2

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沒有遞歸的不均勻數字的總和。

回答

4

這是因爲您使用的是mod。的mod定義,從Standard Prelude

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 s,請嘗試使用mod',從Data.Fixed,根據this answer

另外,如果你只想做整數除法,你可以在你的函數的簽名更改爲

unSum :: Int -> Int 

或相似。

相關問題