import Char -- for intToDigit gen :: Int -> Int -> [String] gen 0 _ = [] gen len max = do d <- map intToDigit [0 .. max-1] ds <- [] : gen (len-1) max return (d:ds)