diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-02 14:07:16 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-02 14:07:16 +0100 |
| commit | f8b54eca1cedff1fcccb099b3cd1dbea81a1410b (patch) | |
| tree | 9a02050b4e011361ca276e7d2222eb7a7b7c91f4 /src | |
| parent | a17c1e5fcbb159d9c6ef84058d8d10ae9567ffc8 (diff) | |
Don't assume inner type of type constructor
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java index 2d496e5..4b02f60 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -394,7 +394,7 @@ public class TypeChecker { ) { var typedReceiver = typeCheckTypeLevelExpression(untyped.receiver(), context); // TODO: check this properly - var receiver = (TypeConstructor<SimpleNativeType>) typedReceiver.value(); + var receiver = (TypeConstructor<?>) typedReceiver.value(); if (untyped.args().size() != receiver.params().size()) { throw new WrongNumberOfTypeLevelArgsError( @@ -408,7 +408,13 @@ public class TypeChecker { .map(untypedArg -> typeCheckMetaType(untypedArg, context).value()) .toList(); - var constructedType = new ConstructedNativeType(receiver, args); + var constructedType = switch (receiver.genericType()) { + case SimpleNativeType _ -> { + @SuppressWarnings("unchecked") + var narrowReceiver = (TypeConstructor<SimpleNativeType>) receiver; + yield new ConstructedNativeType(narrowReceiver, args); + } + }; return new TypedConstructedTypeNode( constructedType, |
