feat: no constructors for expressions and statements for saccharine
This commit is contained in:
@@ -55,7 +55,7 @@ func reduceLet(s *saccharine.LetStatement, e lambda.Expression) lambda.Expressio
|
||||
if len(s.Parameters) == 0 {
|
||||
value = encodeExpression(s.Body)
|
||||
} else {
|
||||
value = encodeAbstraction(saccharine.NewAbstraction(s.Parameters, s.Body))
|
||||
value = encodeAbstraction(&saccharine.Abstraction{Parameters: s.Parameters, Body: s.Body})
|
||||
}
|
||||
|
||||
return lambda.NewApplication(
|
||||
@@ -112,15 +112,15 @@ func encodeExpression(s saccharine.Expression) lambda.Expression {
|
||||
func decodeExression(l lambda.Expression) saccharine.Expression {
|
||||
switch l := l.(type) {
|
||||
case lambda.Variable:
|
||||
return saccharine.NewAtom(l.Name())
|
||||
return &saccharine.Atom{Name: l.Name()}
|
||||
case lambda.Abstraction:
|
||||
return saccharine.NewAbstraction(
|
||||
[]string{l.Parameter()},
|
||||
decodeExression(l.Body()))
|
||||
return &saccharine.Abstraction{
|
||||
Parameters: []string{l.Parameter()},
|
||||
Body: decodeExression(l.Body())}
|
||||
case lambda.Application:
|
||||
return saccharine.NewApplication(
|
||||
decodeExression(l.Abstraction()),
|
||||
[]saccharine.Expression{decodeExression(l.Argument())})
|
||||
return &saccharine.Application{
|
||||
Abstraction: decodeExression(l.Abstraction()),
|
||||
Arguments: []saccharine.Expression{decodeExression(l.Argument())}}
|
||||
default:
|
||||
panic(fmt.Errorf("unknown expression type: %T", l))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user