summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-02 14:07:16 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-02 14:07:16 +0100
commitf8b54eca1cedff1fcccb099b3cd1dbea81a1410b (patch)
tree9a02050b4e011361ca276e7d2222eb7a7b7c91f4 /src/main/java/org/zwobble
parenta17c1e5fcbb159d9c6ef84058d8d10ae9567ffc8 (diff)
Don't assume inner type of type constructor
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java10
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,