package saccharine import ( "fmt" "strings" "git.maximhutz.com/max/lambda/pkg/saccharine/ast" ) func stringifyAtom(n *ast.Atom) string { return n.Name } func stringifyAbstraction(n *ast.Abstraction) string { return "\\" + strings.Join(n.Parameters, " ") + "." + Stringify(n.Body) } func stringifyApplication(n *ast.Application) string { arguments := []string{Stringify(n.Abstraction)} for _, argument := range n.Arguments { arguments = append(arguments, Stringify(argument)) } return "(" + strings.Join(arguments, " ") + ")" } func Stringify(n ast.Expression) string { switch n := n.(type) { case *ast.Atom: return stringifyAtom(n) case *ast.Abstraction: return stringifyAbstraction(n) case *ast.Application: return stringifyApplication(n) default: panic(fmt.Errorf("unknown expression type: %v", n)) } }