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 using named variables. type LambdaEngine struct { Config *config.Config Expression *lambda.Expression emitter.Emitter } // NewLambdaEngine creates a new lambda engine. func NewLambdaEngine(config *config.Config, expression interface{}) *LambdaEngine { expr := expression.(*lambda.Expression) return &LambdaEngine{Config: config, Expression: expr} } // Run begins the reduction process. func (e *LambdaEngine) Run() { e.Emit("start") lambda.ReduceAll(e.Expression, func() { e.Emit("step") }) e.Emit("end") } // GetResult returns the stringified result. func (e *LambdaEngine) GetResult() string { return lambda.Stringify(*e.Expression) }