2011-11-01 30 views
28

¿Es posible convertir un entero en un int? La otra dirección es posible: intoInteger. Sé que Integer puede almacenar valores más grandes, pero a veces se necesita una conversación para usar funciones std-lib. Intenté (n :: Int) y otras muestras de código que encontré, pero nada funciona.Haskell Convertir entero a int?

takeN :: Integer -> [a] -> [a] 
takeN n l = take n l 

Respuesta

33

Use fromIntegral.

takeN :: Integer -> [a] -> [a] 
takeN n l = take (fromIntegral n) l 

Tenga en cuenta que fromIntegral :: (Integral a, Num b) => a -> b, así que a veces se necesita un tipo de anotación extra (por ejemplo (fromIntegral n :: Int)), pero por lo general el compilador puede inferir qué tipo usted quiere.

En el caso especial de su ejemplo, en Data.List, existe genericTake :: (Integral i) => i -> [a] -> [a], que hace lo mismo que take pero con un tipo más general.

13

también hay fromInteger (fromIntegral es sólo fromInteger . toInteger, pero ya que tiene una Integer de todos modos por lo que se puede omitir la segunda parte)