He Daniel.


I have some trouble understanding what you are saying here:

> -- first I need to find  the positions of the mutatable charachters.

No, you don't need to do that, it's in general more efficient to not care
about positions when dealing with lists.

> findPositions :: [Char] -> [[Int]]
> findPositions xs = take (length index) $ index <*> [xs]
> where index = elemIndices <$> leata

[f1, ..., fm] <*> [x1, ..., xn]

produces a list of length m*n, so

length (index <*> [xs]) == length index * length [xs] == length index

~> remove "take (length index) $"

About this piece of code:

fmap snd <$> fmap unzip <$> p

Prelude Control.Applicative> let p = [[[(1,2),(3,4),(4,5)]]]
Prelude Control.Applicative> fmap snd <$> fmap unzip <$> p
[[[2,4,5]]]
Prelude Control.Applicative>

But yeah, it is ridiculously complicated. And I made it up by trial and error and looking at the types.

I have a better approach now. I am now building a tree and then walk trough it to collect all the permutations.

Thanks for your help and effort!


Edgar