我在haskell中有这行代码,其中level :: Float
和y :: Int
,
mod (floor(fromIntegral y + (level/2))) (floor level)
和ghci返回以下内容:
No instance for (Integral Float)
arising from a use of `mod'
Possible fix: add an instance declaration for (Integral Float)
我尝试使用fromIntegral和floor的几个版本,例如
mod (( y + (floor $ level/2))) (floor level)
我尝试将level/2
转换为积分,但总是返回相同的答案
我知道我必须给mod两个积分参数,所以我无法弄清楚代码错误的原因......
答案 0 :(得分:3)
使用level :: Float
和y :: Int
,
mod (floor(fromIntegral y + (level/2))) (floor level)
有效并生成调用者想要的任何Integral
类型。
Prelude> let level = pi :: Float
Prelude> let y = length "foobar"
Prelude> mod (floor(fromIntegral y + (level/2))) (floor level) :: Integer
1
因此错误
No instance for (Integral Float)
arising from a use of `mod'
Possible fix: add an instance declaration for (Integral Float)
表示您尝试将结果用作Float
。
也许你想要
fromIntegral $ mod (floor(fromIntegral y + (level/2))) (floor level)
或者您可能需要更改调用上下文以使用Integral
类型。