Мне нужно создать бесконечный список на основе двух входных данных.
gen :: Int -> Int -> [Int]
gen x y
Каждый элемент должен быть (x * y), и x увеличивается на y на каждой итерации, и исходный x также должен быть в списке. Так
gen 2 4
приведет к
[2,8,24,40,..]
Все мои попытки заканчиваются вечностью (я использую вызов «взять 4 (gen 2 4)» в ghci), поэтому я не уверен, как действовать дальше. Бесконечные списки просто доставляют мне много хлопот. Я пытаюсь сделать это с помощью нотации и монады списка. Любая помощь в правильном направлении будет высоко оценена.
РЕДАКТИРОВАТЬ
Это была моя последняя попытка, которая не сработала. Я изучаю Haskell через своего друга, и он дал мне эту задачу, чтобы научиться делать нотацию для монады списка.
gen :: Int -> Int -> [Int]
gen x y =
do
a <- [x..]
guard $ mod a (x*y) == 0
let x = x+y
return a