// 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/runtime" ) // Track the reductions made by a reduction process. type Explanation struct { reducer runtime.Runtime } // Attaches a new explanation tracker to a reducer. func NewExplanation(r runtime.Runtime) *Explanation { plugin := &Explanation{reducer: r} r.On(runtime.StartEvent, plugin.Start) r.On(runtime.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()) }