// Package "engine" provides an extensible interface for users to interfact with // λ-calculus. 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.Emitter } // Create a new engine, given an unreduced λ-expression. func New(config *config.Config, expression *lambda.Expression) *Engine { return &Engine{Config: config, Expression: expression} } // Begin the reduction process. func (e Engine) Run() { e.Emit("start") for lambda.ReduceOnce(e.Expression) { e.Emit("step") } e.Emit("end") }