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