Я пытаюсь объявить функцию, числовым аргументом которой может быть только Int
.
Я пишу функцию, которая отбрасывает каждый n
элемент списка.Я использую арифметику по модулю, но функция mod
будет принимать только тип Int
, и я не могу понять, как гарантировать, что мое число удовлетворит это.
Мой код выглядит следующим образом:
dropEvery :: (Num n, Eq n) => n -> [a] -> [a]
dropEvery m list = [list !! i | i <- [1 .. length list], i `rem` m /= 0]
Я запустил :info mod
и заменил Num n
на Real n, Enum n and Integral n
(все ограничения, которые я вижу в выводе), но этовсе еще не гарантирует компилятору, что n
будет Int
.
Я уверен, что есть решения этой проблемы, которые не используют такой императивный подход, но я хотел бы использовать эту возможность, чтобы узнать немного больше о том, как типы и ограничения работают в Haskell, решаяэта проблема в лоб.