Haskell将整数转换为Int?

49

能否将 Integer 强制转换成 Int?另一个方向是可以的:toInteger。我知道 Integer 能够存储更大的值,但有时需要将其转换为标准库中的函数使用。我尝试了 (n :: Int) 和其他找到的代码示例,但都无法实现。

takeN :: Integer -> [a] -> [a]
takeN n l = take n l
2个回答

63

使用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做的事情相同,但具有更一般的类型。


20

还有一个函数叫做fromIntegerfromIntegral只是fromInteger . toInteger的简写形式,但由于你已经有了一个Integer,所以可以跳过第二部分)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接