From a3887cd8bd6acedca45a1e76e48d1d0ed9b63942 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Mar 2024 11:20:57 +0000 Subject: Include type-level params in TypedFunctionSignatureNode --- .../shedlang/compiler/ast/typed/TypedFunctionSignatureNode.java | 7 ++++++- src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNode.java index 276ccb9a..f5900768 100644 --- a/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNode.java +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNode.java @@ -4,11 +4,15 @@ import org.pcollections.Empty; import org.pcollections.PVector; import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.sources.Sources; -import org.shedlang.compiler.types.*; +import org.shedlang.compiler.types.Effect; +import org.shedlang.compiler.types.Type; +import org.shedlang.compiler.types.TypeParam; +import java.util.List; import java.util.Optional; public record TypedFunctionSignatureNode( + Optional> typeLevelParams, TypedParamsNode params, Optional> effect, Optional> returnType, @@ -31,6 +35,7 @@ public record TypedFunctionSignatureNode( ) { public TypedFunctionSignatureNode build() { return new TypedFunctionSignatureNode( + Optional.empty(), new TypedParamsNode(positionalParams, namedParams, Sources.NULL), effect, returnType, diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index cc8b799f..a2645a4b 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -1055,12 +1055,11 @@ public class TypeChecker { .map(untypedTypeLevelParams -> typeCheckTypeLevelParams( untypedTypeLevelParams, scope.orElseThrow() - )) - .orElse(List.of()); + )); // TODO: Add type level params to function body context = context.enterFunctionSignature( - typeLevelParams.stream() + typeLevelParams.orElse(List.of()).stream() .map(typeLevelParam -> Map.entry( typeLevelParam.name(), Variable.defined(Types.metaType(typeLevelParam), VariableType.PARAM) @@ -1082,6 +1081,7 @@ public class TypeChecker { )); return new TypedFunctionSignatureNode( + typeLevelParams, typedParams, typedEffect, typedReturnType, -- cgit v1.2.3