## 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>
28 lines
835 B
Go
28 lines
835 B
Go
// Package interpreter provides the abstract Reducer interface for all expression
|
|
// reduction strategies.
|
|
package interpreter
|
|
|
|
import (
|
|
"git.maximhutz.com/max/lambda/pkg/emitter"
|
|
"git.maximhutz.com/max/lambda/pkg/expr"
|
|
)
|
|
|
|
// Reducer defines the interface for expression reduction strategies.
|
|
// Different evaluation modes (normal order, applicative order, SKI combinators,
|
|
// etc.) implement this interface with their own reduction logic.
|
|
//
|
|
// Reducers also implement the Emitter interface to allow plugins to observe
|
|
// reduction lifecycle events (Start, Step, Stop).
|
|
type Interpreter interface {
|
|
emitter.Emitter[Event]
|
|
|
|
// Run a single step. Returns whether the interpreter is complete or not.
|
|
Step() bool
|
|
|
|
// Run until completion.
|
|
Run()
|
|
|
|
// Expression returns the current expression state.
|
|
Expression() expr.Expression
|
|
}
|