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
This commit is contained in:
13
pkg/interpreter/events.go
Normal file
13
pkg/interpreter/events.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package interpreter
|
||||
|
||||
// Event represents lifecycle events during interpretation.
|
||||
type Event int
|
||||
|
||||
const (
|
||||
// StartEvent is emitted before interpretation begins.
|
||||
StartEvent Event = iota
|
||||
// StepEvent is emitted after each interpretation step.
|
||||
StepEvent
|
||||
// StopEvent is emitted after interpretation completes.
|
||||
StopEvent
|
||||
)
|
||||
27
pkg/interpreter/interpreter.go
Normal file
27
pkg/interpreter/interpreter.go
Normal file
@@ -0,0 +1,27 @@
|
||||
// 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
|
||||
}
|
||||
Reference in New Issue
Block a user