Hallo,
Dazu soll z.B. permutations "ab" aufgerufen werden und ungefähr sowas zurückgegeben werden: ["a","ab","ba","b"]
Ich habe kurz versucht, durch Deinen Code durchzusteigen und muss sagen, dass mir irgendwie alles im Kopf herumschwirrt. ;-)
Ich hab eine Idee aus Deinem Code genommen (das Einfügen an alle Zwischenstellen) und den Rest mir selbst mal überlegt:
permutations :: String -> [String]
permutations s = filter (/= "") (phelp s)
where
phelp "" = [""]
phelp (x:xs) = phelp xs ++ concat [ins x y | y <- phelp xs]
ins c s = [(take pos s ++ [c] ++ drop pos s) | pos <- [0..(length s)]]
Das macht genau das, was Du willst. Ich hoffe, der Code ist selbsterklärend, wenn Du noch eine Erklärung willst, reiche ich die gerne nach.
Viele Grüße,
Christian