Haskell Преобразование целого в Int?
Можно ли отличить целое к Int? Возможно другое направление: toInteger. Я знаю, что Integer способен хранить большие значения, но иногда требуется разговор для использования функций std-lib. Я попробовал (n:: Int) и другие образцы кода, которые я нашел, но ничего не работает.
takeN :: Integer -> [a] -> [a]
takeN n l = take n l
Ответы
Ответ 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
, так что вы можете пропустить вторую часть)