49 votes

Haskell Convertir un entier en entier ?

Est-il possible de convertir un entier en entier ? L'autre sens est possible : toInteger. Je sais qu'Integer est capable de stocker des valeurs plus importantes, mais parfois une conversation est nécessaire pour utiliser les fonctions std-lib. J'ai essayé ( n :: Int) et d'autres exemples de code que j'ai trouvés - mais rien ne fonctionne.

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

63voto

dave4420 Points 31298

Utilisez fromIntegral .

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

Notez que fromIntegral :: (Integral a, Num b) => a -> b , donc parfois vous aurez besoin d'une annotation de type supplémentaire (par exemple (fromIntegral n :: Int) ), mais généralement le compilateur peut déduire quel type vous voulez.

Dans le cas particulier de votre exemple, dans Data.List il y a genericTake :: (Integral i) => i -> [a] -> [a] , qui fait la même chose que take mais avec un type plus général.

20voto

newacct Points 42530

il y a aussi fromInteger ( fromIntegral n'est que fromInteger . toInteger , mais puisque vous avez un Integer toute façon, vous pouvez donc sauter la deuxième partie)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X