title: Squashing tuples from (a,(b,c)) to (a,b,c) in fsharp
body: <p>Does it make sense to have such functions defined</p>
  
  <pre><code>let squash12 (e:('a*('b*'c)   )) = e |&gt; (fun (a,(b,c)  ) -&gt; (a,b,c  ))
  let squash21 (e:(('a*'b)*'c   )) = e |&gt; (fun ((a,b),c  ) -&gt; (a,b,c  ))
  let squash13 (e:('a*('b*'c*'d))) = e |&gt; (fun (a,(b,c,d)) -&gt; (a,b,c,d))
  
  let seqsquash12 (sa:seq&lt;'T&gt;) = sa |&gt; Seq.map squash12
  let seqsquash21 (sa:seq&lt;'T&gt;) = sa |&gt; Seq.map squash21
  let seqsquash13 (sa:seq&lt;'T&gt;) = sa |&gt; Seq.map squash13
  </code></pre>
  
  <p>I could not find another way to make my core code recursive (leading to nested tuples), yet expose simple function that maps to generalized n-dimensional coordinates.</p>