xLens :: Lens (XTag,(s1,(s2,...)))(X a1 ... aN)
xLens = lens get set where
get (X1Tag,(s1,(s2,...)))= X1 s{c11} s{c12}......
get (XMTag,(s1,(s2,...)))= X2 s{cM1} s{cM2}...-- replace second occurrence of the same variable name by _ in pattern
set (X1 s{c11} s{c12}...)(_,(s1,(s2,...)))=(X1Tag,(s1,(s2,...)))...
set (XM s{cM1} s{cM2}...)(_,(s1,(s2,...)))=(XMTag,(s1,(s2,...)))