Files
lambda/pkg/repr/saccharine/expression.go
2026-01-19 19:32:08 -05:00

60 lines
1.3 KiB
Go

package saccharine
import (
"git.maximhutz.com/max/lambda/pkg/repr"
)
type Expression interface {
repr.Repr
}
var (
_ Expression = Abstraction{}
_ Expression = Application{}
_ Expression = Variable{}
_ Expression = Clause{}
)
/** ------------------------------------------------------------------------- */
type Abstraction struct {
Parameters []string
Body Expression
}
func NewAbstraction(parameter []string, body Expression) *Abstraction {
return &Abstraction{Parameters: parameter, Body: body}
}
/** ------------------------------------------------------------------------- */
type Application struct {
Abstraction Expression
Arguments []Expression
}
func NewApplication(abstraction Expression, arguments []Expression) *Application {
return &Application{Abstraction: abstraction, Arguments: arguments}
}
/** ------------------------------------------------------------------------- */
type Variable struct {
Name string
}
func NewVariable(name string) *Variable {
return &Variable{Name: name}
}
/** ------------------------------------------------------------------------- */
type Clause struct {
Statements []Statement
Returns Expression
}
func NewClause(statements []Statement, returns Expression) *Clause {
return &Clause{Statements: statements, Returns: returns}
}