aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-02 11:20:57 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-02 11:20:57 +0000
commita3887cd8bd6acedca45a1e76e48d1d0ed9b63942 (patch)
tree58666fe12f128bbd147f98318cf2e1ab02678f59 /src/main/java
parent9bace82acaf0ef7ec4c83203c262544f3dd7cae2 (diff)
Include type-level params in TypedFunctionSignatureNode
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNode.java7
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java6
2 files changed, 9 insertions, 4 deletions
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<List<TypeParam>> typeLevelParams,
TypedParamsNode params,
Optional<TypedTypeLevelExpressionNode<Effect>> effect,
Optional<TypedTypeLevelExpressionNode<Type>> 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,