Понимание списка Haskell при переменном количестве строк

Если у меня есть две строки, я использую понимание списка для получения желаемого результата:

 combineStrings firstStr sndStr = [ [a,b] | a <- firstStr, b <- sndStr]

Для трех строк я использую это

 combineStrings firstStr sndStr trdStr = [ [a,b,c] | a <- firstStr, b <- sndStr, c <- trdStr]

Я пытаюсь получить тот же результат для переменного количества строк. Например, если у меня есть функция, которая принимает следующую форму:

 combineStrings :: [String] -> [String]

Я пытаюсь получить те же результаты, что и выше, для 2, 3 ... n списков ... Я пробовал несколько способов, например этот

 combineStrings []      = []
 combineStrings (hd:tl) = [ a:b | a <- hd, b <- combineStrings tl]

но это не удается из-за [] в первом предложении. Может кто-нибудь помочь мне написать это, пожалуйста?

6
задан Adi 4 January 2012 в 14:03
поделиться