package ast;
import java.util.List;
import ast.ExpCore.Block;
import ast.ExpCore.Signal;
import lombok.Value;
public interface Redex {
public static Redex invalid(){return NoRedex.instance;}
@Value public static class NoRedex implements Redex{private final static Redex instance=new NoRedex();}
@Value public static class MethCall implements Redex{ExpCore.MCall that;}
@Value public static class Garbage implements Redex{ExpCore thatLessGarbage;}
@Value public static class Ph implements Redex{ExpCore.Block that; int phIndex;}
@Value public static class Using implements Redex{ExpCore.Using that;ExpCore toReplace;}
@Value public static class UsingOut implements Redex{ExpCore.Using that;}
@Value public static class LoopR implements Redex{ExpCore.Loop that;}
@Value public static class BlockElim implements Redex{ExpCore.Block that; int elimIndex;}
@Value public static class Subst implements Redex{ExpCore.Block that; int substIndex;}
@Value public static class Meta implements Redex{ExpCore.ClassB that;}
@Value public static class CaptureOrNot implements Redex{ExpCore.Block that; int throwIndex;Signal throwExtracted;}
@Value public static class NoThrowRemoveOn implements Redex{ExpCore.Block that;}
@Value public static class FUpdateExtended implements Redex{ExpCore ctx;Block aroundCtx; int positionX;List<Block.Dec>dvs;}
}