3

私は Haskell を学ぼうとしていますが、数字の変換に行き詰まりました。なぜ Haskell コンパイラがこのコードで怒っているのか説明してもらえますか?

phimagic :: Int -> [Int]
phimagic x = x : (phimagic (round (x * 4.236068)))

エラーメッセージが出力されます:

problem2.hs:25:33:
    No instance for (RealFrac Int) arising from a use of `round'
    Possible fix: add an instance declaration for (RealFrac Int)
    In the first argument of `phimagic', namely
      `(round (x * 4.236068))'
    In the second argument of `(:)', namely
      `(phimagic (round (x * 4.236068)))'
    In the expression: x : (phimagic (round (x * 4.236068)))


problem2.hs:25:44:
    No instance for (Fractional Int)
      arising from the literal `4.236068'
    Possible fix: add an instance declaration for (Fractional Int)
    In the second argument of `(*)', namely `4.236068'
    In the first argument of `round', namely `(x * 4.236068)'
    In the first argument of `phimagic', namely
      `(round (x * 4.236068))'

私はすでに、メソッド シグネチャでいくつかの組み合わせを試しました (Integral、Fractional、Double などを追加)。そのリテラル 4.236068 が問題に関係しているが、それを理解できないことを何かが教えてくれます。

4

1 に答える 1