refactor: make lambda expression types immutable (#38)

## Summary

- 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.

## Test plan

- [x] All existing tests pass (`make test`).

Reviewed-on: #38
Co-authored-by: M.V. Hutz <git@maximhutz.me>
Co-committed-by: M.V. Hutz <git@maximhutz.me>
This commit was merged in pull request #38.
This commit is contained in:
2026-01-17 22:00:54 +00:00
committed by Maxim Hutz
parent c2aa77cb92
commit e85cf7ceff
21 changed files with 191 additions and 255 deletions

View File

@@ -5,19 +5,19 @@ package plugins
import (
"fmt"
"git.maximhutz.com/max/lambda/pkg/reducer"
"git.maximhutz.com/max/lambda/pkg/interpreter"
)
// Track the reductions made by a reduction process.
type Explanation struct {
reducer reducer.Reducer
reducer interpreter.Interpreter
}
// Attaches a new explanation tracker to a reducer.
func NewExplanation(r reducer.Reducer) *Explanation {
func NewExplanation(r interpreter.Interpreter) *Explanation {
plugin := &Explanation{reducer: r}
r.On(reducer.StartEvent, plugin.Start)
r.On(reducer.StepEvent, plugin.Step)
r.On(interpreter.StartEvent, plugin.Start)
r.On(interpreter.StepEvent, plugin.Step)
return plugin
}