package scotch.compiler.syntax.pattern;
import scotch.compiler.syntax.value.FunctionValue;
import scotch.compiler.syntax.value.IsConstructor;
import scotch.compiler.syntax.value.PatternMatcher;
import scotch.compiler.syntax.value.Value;
public interface PatternReducer {
void addAssignment(CaptureMatch capture);
void addCondition(Value argument, Value value);
void addCondition(IsConstructor constructor);
void addTaggedArgument(Value taggedArgument);
void beginPattern(PatternMatcher matcher);
void beginPatternCase(PatternCase patternCase);
void endPattern();
void endPatternCase();
Value getTaggedArgument(Value argument);
void markFunction(FunctionValue function);
Value reducePattern();
}