В haskell у меня есть эта функция, которая прекрасно работает:
primesAtMost :: Integral a => a -> [a]
primesAtMost n = sieve [2..n]
where
sieve :: Integral a => [a] -> [a]
sieve [] = []
sieve (x:xs) = (x:sieve (filterMultiples x xs))
Проблема в том, что это тип параметра a, и я не могу это изменить.
Когда я пытаюсь вызвать эту функцию с параметром, тип которого Int, это выдает ошибку: не удалось сопоставить тип `a1 'с` Int'
Например:
primesAtMost (length n)