Подтвердить что ты не робот

Haskell Преобразование целого в Int?

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

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

Ответ 1

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

Ответ 2

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