Haskell конвертировать целое число в Int? - PullRequest
37 голосов
/ 01 ноября 2011

Можно ли привести Integer к Int?Возможно другое направление: toInteger.Я знаю, что Integer может хранить большие значения, но иногда необходим разговор для использования функций std-lib.Я пробовал (n :: Int) и другие примеры кода, которые я нашел - но ничего не работает.

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

Ответы [ 2 ]

46 голосов
/ 01 ноября 2011

Используйте 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, но с более общим типом.

17 голосов
/ 02 ноября 2011

есть также fromInteger (fromIntegral - это просто fromInteger . toInteger, но поскольку у вас есть Integer, так что вы можете пропустить вторую часть)

...