Я полагаю, что вы хотели бы использовать функцию replicateM
в Control.Monad
.
Монада списка основана на «попытке всех возможных комбинаций», и обычный replicate
создает список, повторяя элемент несколько раз. Таким образом, результатом replicateM
является, учитывая некоторый список возможных значений, список всех возможных способов выбора элемента из этого списка несколько раз.
Например:
> replicateM 2 [0, 1]
[[0,0],[0,1],[1,0],[1,1]]
> replicateM 3 [0, 1]
[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
Таким образом, чтобы распространить свою функцию на произвольные повторения, вы должны использовать что-то вроде:
getListN n x = replicateM n [1..x]
... где ваш исходный getList
будет эквивалентен getListN 3
.