// Package engine defines a general process of reducing a lambda calculus // expression. package engine // A Process handles the reduction of a single expression. type Process[T any] interface { // Get the current state of the process. // Returns an error if the current state cannot be represented. Get() (T, error) // Step performs reduction(s) on the representation. If the number of steps // defined is less than zero, it will perform as many reductions as // possible. Returns whether a reduction was performed. Step(int) bool } // An Engine is an function that generates reduction processes. type Engine[T any] = func(T) (Process[T], error)