diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-31 11:30:03 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-31 11:30:03 +0000 |
| commit | 75a6e3a22c6b0ff3f8f61fb51de20a9c7f222ebe (patch) | |
| tree | a377ee3eca098b32ee602754681c1276e1327deb /src/main/java | |
| parent | fe34bc3d273b902ab0abd38c9547741274fdc14a (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.java | 6 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/types/FunctionType.java | 10 |
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( |
