// Package "explanation" provides an observer to gather the reasoning during the // reduction, and present a thorough explanation to the user for each step. package plugins import ( "fmt" "git.maximhutz.com/max/lambda/pkg/reducer" ) // Track the reductions made by a reduction process. type Explanation struct { reducer reducer.Reducer } // Attaches a new explanation tracker to a reducer. func NewExplanation(r reducer.Reducer) *Explanation { plugin := &Explanation{reducer: r} r.On(reducer.StartEvent, plugin.Start) r.On(reducer.StepEvent, plugin.Step) return plugin } func (t *Explanation) Start() { fmt.Println(t.reducer.Expression().String()) } func (t *Explanation) Step() { fmt.Println(" =", t.reducer.Expression().String()) }