У меня есть понимание списка, которое выглядит так:
cross ps = [ p* pp * ppp | p <- ps, pp <- ps, ppp <- ps, p >= pp , pp >= ppp ]
Как мне добиться этого, используя монады, не вводя буквально имена списков?
dim ps n = do
p <- ps
pp <- ps
ppp <- ps
p...p <- ps
guard (p >= pp && pp >= ppp ... && p...p >=p....p)
return (p*pp*ppp*p...p)
Как я могу сделать это без явного присвоения значений, чтобы использовать монаду списка?