## Summary - Added doc comments across the codebase: `pkg/lambda`, `pkg/saccharine`, `pkg/codec`, `pkg/engine`, `pkg/iterator`, `pkg/set`, `pkg/convert`, `internal/registry`, and `cmd/lambda`. - Made lambda and saccharine expression structs use public fields instead of getters, matching `go/ast` conventions. - Removed superfluous constructors for saccharine and lambda expression/statement types in favor of struct literals. - Consolidated saccharine token constructors into a single `NewToken` function. - Removed the unused `trace` package. ## Test plan - [x] `go build ./...` passes. - [x] `go test ./...` passes. - [ ] Verify `go doc` output renders correctly for documented packages. Reviewed-on: #45 Co-authored-by: M.V. Hutz <git@maximhutz.me> Co-committed-by: M.V. Hutz <git@maximhutz.me>
18 lines
407 B
Go
18 lines
407 B
Go
package lambda
|
|
|
|
import "fmt"
|
|
|
|
// Stringify turns an expression as a string.
|
|
func Stringify(e Expression) string {
|
|
switch e := e.(type) {
|
|
case Variable:
|
|
return e.Name
|
|
case Abstraction:
|
|
return "\\" + e.Parameter + "." + Stringify(e.Body)
|
|
case Application:
|
|
return "(" + Stringify(e.Abstraction) + " " + Stringify(e.Argument) + ")"
|
|
default:
|
|
panic(fmt.Errorf("unknown expression type: %v", e))
|
|
}
|
|
}
|