aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
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;