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 :: Floaty :: 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 に答える