0

我在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 两个 Integral 参数,所以我不知道为什么代码是错误的......

4

1 回答 1

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类型。

于 2013-01-27T14:55:12.080 回答