aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-31 11:30:03 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-31 11:30:03 +0000
commit75a6e3a22c6b0ff3f8f61fb51de20a9c7f222ebe (patch)
treea377ee3eca098b32ee602754681c1276e1327deb /src/main/java
parentfe34bc3d273b902ab0abd38c9547741274fdc14a (diff)
Disable subtyping for function types with type level params
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java6
-rw-r--r--src/main/java/org/shedlang/compiler/types/FunctionType.java10
2 files changed, 15 insertions, 1 deletions
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<TypeParam> 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(