Haskell将整数转换为Int?

NaN*_*NaN 38 int haskell types integer casting

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

takeN :: Integer -> [a] -> [a]
takeN n l = take n l
Run Code Online (Sandbox Code Playgroud)

dav*_*420 47

使用fromIntegral.

takeN :: Integer -> [a] -> [a]
takeN n l = take (fromIntegral n) l
Run Code Online (Sandbox Code Playgroud)

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

在你的例子的特殊情况下,在Data.List那里genericTake :: (Integral i) => i -> [a] -> [a],它做同样的事情,take但有一个更通用的类型.


new*_*cct 17

还有fromInteger(fromIntegral只是fromInteger . toInteger,但既然你有一个Integer,所以你可以跳过第二部分)