Files
lambda/pkg/saccharine/ast.go

42 lines
916 B
Go

package saccharine
type Node interface {
IsNode()
}
/** ------------------------------------------------------------------------- */
type Abstraction struct {
Parameters []string
Body Node
}
type Application struct {
Abstraction Node
Arguments []Node
}
type Variable struct {
Name string
}
/** ------------------------------------------------------------------------- */
func NewAbstraction(parameter []string, body Node) *Abstraction {
return &Abstraction{Parameters: parameter, Body: body}
}
func NewApplication(abstraction Node, arguments []Node) *Application {
return &Application{Abstraction: abstraction, Arguments: arguments}
}
func NewVariable(name string) *Variable {
return &Variable{Name: name}
}
/** ------------------------------------------------------------------------- */
func (_ Abstraction) IsNode() {}
func (_ Application) IsNode() {}
func (_ Variable) IsNode() {}