aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-24 21:29:06 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-24 21:29:06 +0100
commitb2db86c12b90dffe5f625d4209821594fd4cd620 (patch)
treeb11a92ee950359a7c6c78ed2c3f4b88bbc331163 /src/main/java
parent3fca8824b6ce6f7a654706d9d1c4fef537335a5e (diff)
Type check named params in function type
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionTypeNode.java9
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java9
2 files changed, 17 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionTypeNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionTypeNode.java
index a51e317e..fd47c7bf 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionTypeNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedFunctionTypeNode.java
@@ -46,6 +46,15 @@ public record UntypedFunctionTypeNode(
);
}
+ public Builder addNamedParam(String name, UntypedTypeLevelExpressionNode type) {
+ return new Builder(
+ this.positionalParams,
+ this.namedParams.plus(new UntypedParamNode(name, type, Sources.NULL)),
+ this.effect,
+ this.returnType
+ );
+ }
+
public Builder withEffect(UntypedTypeLevelExpressionNode effect) {
return new Builder(
this.positionalParams,
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 1af620d8..0dd93a38 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -654,6 +654,13 @@ public class TypeChecker {
).value())
.toList();
+ var namedParams = untyped.params().named().stream()
+ .map(param -> {
+ var typedParamNode = typeCheckParam(param, context);
+ return new NamedParam(typedParamNode.name(), typedParamNode.type().value());
+ })
+ .toList();
+
var effect = untyped.effect()
.map(untypedEffect -> typeCheckTypeLevelExpression(
TypeSets.EFFECT,
@@ -671,7 +678,7 @@ public class TypeChecker {
return new TypedFunctionTypeNode(
new FunctionType(
positionalParams,
- List.of(),
+ namedParams,
effect,
returnType
),