blob: 6d75a08fa9f5d2cad8754a0f82f41d838ad44228 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package coffee.liz.lambda.ast;
import lombok.NonNull;
import java.util.Optional;
/**
* Represents an expression in the untyped lambda calculus.
*/
public sealed interface Expression
permits Expression.AbstractionExpression, Expression.IdentifierExpression, Expression.ApplicationExpression {
Optional<SourceComment> comment();
SourceSpan span();
record AbstractionExpression(@NonNull Optional<SourceComment> comment, @NonNull SourceSpan span,
@NonNull String parameter, @NonNull Expression body) implements Expression {
}
record ApplicationExpression(@NonNull Optional<SourceComment> comment, @NonNull SourceSpan span,
@NonNull Expression applicable, @NonNull Expression argument) implements Expression {
}
record IdentifierExpression(@NonNull Optional<SourceComment> comment, @NonNull SourceSpan span,
@NonNull String name) implements Expression {
}
}
|