2
No instance for (Fractional Int) arising from a use of `leap'
Possible fix: add an instance declaration for (Fractional Int)
In the first argument of `(==)', namely `leap (x)'
In the second argument of `(&&)', namely `leap (x) == 1'
In the expression: (y == 2) && leap (x) == 1

ghci でファイルをロードするときにこのエラーが発生する

これは、エラーの原因となっている関数です

daysInMonth :: Int -> Int -> Int
daysInMonth y x
    | (y == 1 || y == 3 || y == 5 || y == 7 || y == 8 || y == 10 || y == 12) = 31
    | (y == 4 || y == 6 || y == 9 || y == 11) = 30
    | (y == 2) && leap(x) == 1 = 28
    | (y == 2) && leap(x) == 0 = 29
    where
    leap a = if (a / 4) == 0 then return 1 else return 0
4

1 に答える 1

3

あなたは計算しようとしていますa / 4(aこれまでに等しいx、 an Int) は anIntです。型は型クラスにInt属していないため、s に対して定義されていません。やりたいことをするために、次のことができます。Fractional/Int

  1. 書き込みによる型aへの変換Fractionalif fromIntegral a / 4 == 0 then ...

  2. または、「整数除算」を行い、残りを破棄する場合は、次のように記述します。if quot a 4 == 0 then ...

また、returnHaskell はreturn他の言語とは異なります。ここでそれを取り除きます。

(また、それはうるう年を決定する方法ではありません。)

于 2013-10-28T21:04:07.387 に答える