是否可以将Integer转换为Int?另一个方向是可能的:toInteger。我知道Integer能够存储更大的值,但有时需要使用std-lib函数进行对话。我试过(n :: Int)和我找到的其他代码示例 - 但没有任何作用。
takeN :: Integer -> [a] -> [a]
takeN n l = take n l
答案 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)
还有fromInteger
(fromIntegral
只是fromInteger . toInteger
,但是因为你还有Integer
,所以你可以跳过第二部分)