hugs: Haskell: Permutationen

Beitrag lesen

Hi,

leider bringt mich Haskell noch zur Verzweiflung.
Würde gerne anhand eines gegebenen Strings alle Permutationen finden, die man mit den einzelnen Chars des Eingabestrings bilden kann:

Dazu soll z.B. permutations "ab" aufgerufen werden und ungefähr sowas zurückgegeben werden: ["a","ab","ba","b"]

permutations übergibt die Aufgabe an px, welche dann "Buchstabe für Buchstabe" einen String zusammensetzt indem es an jeder beliebigen Stelle einen Char einfügt und somit alle Kombinationen abdeckt. Dann wendet es sich selbst wieder auf die neuen Zeichenketten an usw.
Soviel zur Theorie... Was passiert, ist, dass die Rückgabe ["a",""] ist :(

permutations :: String -> [String]
permutations s = px [""] s

px :: [String] -> String -> [String]
px ssold []=[[]]
px [""] snew=px [[head snew]] (tail snew)
px ssold snew = ssold ++ px (foldr1 (++) [pc (head snew) sold|sold<-ssold]) (tail snew)

pc :: Char -> String -> [String]
pc c s = [insByPos c s pos|pos<-[0..((length s)-1)]]

insByPos :: Char -> String -> Int -> String
insByPos c s pos = take pos s ++ [c] ++ drop pos s

Hoffe, ihr habt einen guten Rat.
Danke schonmal