Est-il possible de lancer un Integer sur un Int? L'autre direction est possible: toInteger. Je sais qu'Integer est capable de stocker de plus grandes valeurs, 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
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.
il y a aussi fromInteger
(fromIntegral
est juste fromInteger . toInteger
, mais comme vous avez un Integer
de toute façon, vous pouvez sauter la deuxième partie)