1

重複の可能性:
Haskell Convert Integer to Int?

誕生年を計算する関数があります

birthYear :: Int -> Int
birthYear age = currentYear - age

currentYear :: Integral -> Integral
currentYear year = year

生年月日が機能するように、Integral 型を Int にキャストするにはどうすればよいですか?
参考までに、age は IO から来ているため Int として固定されており、読み取り (age) 関数を使用して String から Int に変換しています。

4

2 に答える 2

3

Integralまず、 (型クラスである) を型として使用することはできません。あなたはおそらく次のことを意味していました:

birthYear :: Int -> Int
birthYear age = currentYear - age

currentYear :: Integral a => a
currentYear = 2011

そして、これはうまくいきます。または、次のものが必要な場合:

currentYear :: Integral a => a -> a
currentYear year = year

次に、これも機能します。

birthYear :: Int -> Int
birthYear age = (currentYear 2011) - age

IntのインスタンスなIntegralので、何も「キャスト」する必要はありません。

于 2011-11-28T22:40:27.790 に答える
0

これを読んでください:

http://www.haskell.org/haskellwiki/Converting_numbers

これから:

整数型は、整数のみを含み、分数を含まない型です。Int (固定サイズの機械整数) と Integer (任意精度の整数) は、標準 Haskell ライブラリの 2 つの Integral 型です。型変換の主力は fromIntegral で、整数型を数値型 (Rational、Double、Int16 など) に変換します。

fromIntegral :: (Num b, Integral a) => a -> b
于 2011-11-28T22:38:04.833 に答える