能否将 Integer
强制转换成 Int
?另一个方向是可以的:toInteger
。我知道 Integer
能够存储更大的值,但有时需要将其转换为标准库中的函数使用。我尝试了 (n :: Int)
和其他找到的代码示例,但都无法实现。
takeN :: Integer -> [a] -> [a]
takeN n l = take n l
使用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
做的事情相同,但具有更一般的类型。
还有一个函数叫做fromInteger
(fromIntegral
只是fromInteger . toInteger
的简写形式,但由于你已经有了一个Integer
,所以可以跳过第二部分)