是否可以将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
,所以你可以跳过第二部分)