Haskell将整数转换为Int?

时间:2011-11-01 09:47:51

标签: haskell types casting integer int

是否可以将Integer转换为Int?另一个方向是可能的:toInteger。我知道Integer能够存储更大的值,但有时需要使用std-lib函数进行对话。我试过(n :: Int)和我找到的其他代码示例 - 但没有任何作用。

takeN :: Integer -> [a] -> [a]
takeN n l = take n l

2 个答案:

答案 0 :(得分:45)

使用fromIntegral

takeN :: Integer -> [a] -> [a]
takeN n l = take (fromIntegral n) l

请注意fromIntegral :: (Integral a, Num b) => a -> b,因此有时您需要额外的类型注释(例如(fromIntegral n :: Int)),但通常编译器可以推断出您想要的类型。

在您的示例的特殊情况下,Data.List中有genericTake :: (Integral i) => i -> [a] -> [a],它与take的功能相同,但具有更一般的类型。

答案 1 :(得分:17)

还有fromIntegerfromIntegral只是fromInteger . toInteger,但是因为你还有Integer,所以你可以跳过第二部分)