// 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/internal/engine" ) // Track the reductions made by a reduction process. type Explanation struct { process *engine.Engine } // Attaches a new explanation tracker to a process. func NewExplanation(process *engine.Engine) *Explanation { plugin := &Explanation{process: process} process.On(engine.StartEvent, plugin.Start) process.On(engine.StepEvent, plugin.Step) return plugin } func (t *Explanation) Start() { fmt.Println(t.process.Expression.String()) } func (t *Explanation) Step() { fmt.Println(" =", t.process.Expression.String()) }