He Daniel.<br><br><br>I have some trouble understanding what you are saying here:<br><br><pre>&gt;<i> -- first I need to find  the positions of the mutatable charachters.<br></i><br>No, you don&#39;t need to do that, it&#39;s in general more efficient to not care <br>
about positions when dealing with lists.<br><br>&gt;<i> findPositions :: [Char] -&gt; [[Int]]<br></i>&gt;<i> findPositions xs = take (length index) $ index &lt;*&gt; [xs]<br></i>&gt;<i>         where index = elemIndices &lt;$&gt; leata<br>
</i><br>[f1, ..., fm] &lt;*&gt; [x1, ..., xn]<br><br>produces a list of length m*n, so<br><br>length (index &lt;*&gt; [xs]) == length index * length [xs] == length index<br><br>~&gt; remove &quot;take (length index) $&quot;<br>
<br>About this piece of code:</pre><pre><br>fmap snd &lt;$&gt; fmap unzip &lt;$&gt; p<br><br>Prelude Control.Applicative&gt; let p = [[[(1,2),(3,4),(4,5)]]]<br>Prelude Control.Applicative&gt; fmap snd &lt;$&gt; fmap unzip &lt;$&gt; p  <br>
[[[2,4,5]]]<br>Prelude Control.Applicative&gt; <br><br>But yeah, it is ridiculously complicated. And I made it up by trial and error and looking at the types.<br><br>I have a better approach now. I am now building a tree and then walk trough it to collect all the permutations.<br>
<br>Thanks for your help and effort!<br><br><br>Edgar<br><br></pre><br>