aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-25 11:47:18 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-25 12:07:37 +0000
commitd94641005c2b35800ee4499d2c17ba06579dabe6 (patch)
treef38132ca76f995a9d41e22f9b3ae3d7accfa6886 /src/main/java
parent32420dc979cfeaa905f78b84f43b58af09ea3984 (diff)
Add type substitution for function types
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/types/TypeSubstitution.java13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/main/java/org/shedlang/compiler/types/TypeSubstitution.java b/src/main/java/org/shedlang/compiler/types/TypeSubstitution.java
index e08b859e..7f86b3ef 100644
--- a/src/main/java/org/shedlang/compiler/types/TypeSubstitution.java
+++ b/src/main/java/org/shedlang/compiler/types/TypeSubstitution.java
@@ -13,9 +13,16 @@ public class TypeSubstitution {
throw new UnsupportedOperationException("TODO");
}
- case FunctionType functionType -> {
- throw new UnsupportedOperationException("TODO");
- }
+ case FunctionType functionType -> new FunctionType(
+ functionType.positionalParams().stream()
+ .map(param -> substitute(param, map))
+ .toList(),
+ functionType.namedParams().stream()
+ .map(param -> new NamedParam(param.name(), substitute(param.type(), map)))
+ .toList(),
+ functionType.effect(),
+ substitute(functionType.returnType(), map)
+ );
case IntType intType -> type;