package saccharine import ( "strings" "git.maximhutz.com/max/lambda/pkg/saccharine/ast" ) type stringifyVisitor struct{} func (v stringifyVisitor) VisitAtom(n *ast.Atom) string { return n.Name } func (v stringifyVisitor) VisitAbstraction(n *ast.Abstraction) string { return "\\" + strings.Join(n.Parameters, " ") + "." + ast.Visit(v, n.Body) } func (v stringifyVisitor) VisitApplication(n *ast.Application) string { arguments := []string{ast.Visit(v, n.Abstraction)} for _, argument := range n.Arguments { arguments = append(arguments, ast.Visit(v, argument)) } return "(" + strings.Join(arguments, " ") + ")" } func Stringify(n ast.Expression) string { return ast.Visit(&stringifyVisitor{}, n) }