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) #### gen :: Int -> Int -> [String] gen 0 _ = [] gen len max = concat ( map ( \digit -> [digit] : ( map ( digit : ) ( gen (len - 1) max ) ) ) ( map intToDigit [0 .. max-1] ) )