Files
lambda/internal/plugins/explanation.go
M.V. Hutz 7318c0dac4 refactor: make lambda expression types immutable
- Change Abstraction, Application, and Variable to use private fields with getter methods
- Return value types instead of pointers from constructors
- Update all type switches to match value types instead of pointer types
- Remove pointer equality optimizations (not applicable with immutable values)
- Return empty set instead of nil from GetFreeVariables default case
2026-01-17 16:29:24 -05:00

32 lines
781 B
Go

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