From 75a6e3a22c6b0ff3f8f61fb51de20a9c7f222ebe Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 31 Dec 2023 11:30:03 +0000 Subject: Disable subtyping for function types with type level params --- .../shedlang/compiler/typechecker/TypeCheckerSubTyping.java | 6 +++++- src/main/java/org/shedlang/compiler/types/FunctionType.java | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java index d6a254cc..d4659a4c 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java @@ -142,7 +142,11 @@ public class TypeCheckerSubTyping { supertype instanceof FunctionType supertypeFunction && subtype instanceof FunctionType subtypeFunction ) { - // TODO: handle type params + // TODO: handle type params properly + if (supertypeFunction.typeLevelParams().isPresent() || subtypeFunction.typeLevelParams().isPresent()) { + return Optional.empty(); + } + if (subtypeFunction.positionalParams().size() != supertypeFunction.positionalParams().size()) { return Optional.empty(); } diff --git a/src/main/java/org/shedlang/compiler/types/FunctionType.java b/src/main/java/org/shedlang/compiler/types/FunctionType.java index 026b3bd0..2c6b4841 100644 --- a/src/main/java/org/shedlang/compiler/types/FunctionType.java +++ b/src/main/java/org/shedlang/compiler/types/FunctionType.java @@ -91,6 +91,16 @@ public record FunctionType( ); } + public Builder withTypeLevelParams(List typeLevelParams) { + return new Builder( + Optional.of(typeLevelParams), + this.positionalParams, + this.namedParams, + this.effect, + this.returnType + ); + } + public Builder addNamedParam(String name, Type type) { var namedParam = new NamedParam(name, type); return new Builder( -- cgit v1.2.3