/**
 * Implosion of AsFix alternatives.
 */
module stratego/asfix/implode/alternative
strategies

  ImplodeAlternative =
   (  appl(prod([cf(?s)<+?s], cf(?alt(a1,a2)),  id), ?args)
   <+ appl(prod([?s],         lex(?alt(a1,a2)), id), ?args)
   );  
   !(alt(a1, a2), 1);
   rec x({n, ai, aj:
        ?(s, n); !alt(n,args)
     <+ ?(alt(s, si), n); !alt(n, args)
     <+ ?(alt(ai, aj), n); <x>(aj, <add>(n, 1))
   })