combos n ls = filter ((>= n) . length) . map concat . sequence . map (([]:) . map return) $ ls #### > combos 1 ["abc", "def"] ["d","e","f","a","ad","ae","af","b","bd","be","bf","c","cd","ce","cf"] #### > combos 4 ["abc", "de", "fgh", "i", "jk", "l", "m"] ["ijlm","iklm","fjlm","fklm","film","fijm", ... "cehijlm","cehik","cehikm","cehikl","cehiklm"]