Files
lambda/internal/engine/engine.go
M.V. Hutz eba2182151 refactor: extract abstract Expression interface
Introduce pkg/expr.Expression as a base interface for all evaluatable
expression types, enabling future support for multiple evaluation modes
(SKI combinators, typed lambda calculus, etc.).

- Add pkg/expr/expr.go with Expression interface requiring String() method.
- Update lambda.Expression to embed expr.Expression.
- Add String() method to Abstraction, Application, and Variable types.
- Update plugins to use String() instead of lambda.Stringify().
2026-01-16 18:35:14 -05:00

37 lines
856 B
Go

// Package "engine" provides an extensible interface for users to interact with
// λ-calculus and other expression evaluation modes.
package engine
import (
"git.maximhutz.com/max/lambda/internal/config"
"git.maximhutz.com/max/lambda/pkg/emitter"
"git.maximhutz.com/max/lambda/pkg/lambda"
)
// A process for reducing one expression.
type Engine struct {
Config *config.Config
Expression *lambda.Expression
emitter.BaseEmitter[Event]
}
// Create a new engine, given an unreduced λ-expression.
func New(config *config.Config, expression *lambda.Expression) *Engine {
return &Engine{
Config: config,
Expression: expression,
BaseEmitter: *emitter.New[Event](),
}
}
// Begin the reduction process.
func (e *Engine) Run() {
e.Emit(StartEvent)
lambda.ReduceAll(e.Expression, func() {
e.Emit(StepEvent)
})
e.Emit(StopEvent)
}