From b2db86c12b90dffe5f625d4209821594fd4cd620 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 24 Oct 2023 21:29:06 +0100 Subject: Type check named params in function type --- .../shedlang/compiler/ast/untyped/UntypedFunctionTypeNode.java | 9 +++++++++ src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src/main/java') 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 ), -- cgit v1.2.3