1

可能重复:
Haskell 将整数转换为整数?

我有一个计算出生年份的函数

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

currentYear :: Integral -> Integral
currentYear year = year

如何将 Integral 类型转换为 Int 以便birthYear 可以工作?
仅供参考,年龄固定为 Int,因为它来自 IO,我正在使用读取(年龄)函数从字符串转换为 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 库中的两种 Integral 类型。转换类型的主力是 fromIntegral,它将任何整数类型转换为任何数字类型(例如 Rational、Double、Int16...):

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