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/ast/typed/TypedFunctionDefinitionNode.java34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java
index 9bec5e5c..e4d9a7c6 100644
--- a/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNode.java
@@ -5,9 +5,7 @@ import org.pcollections.POrderedSet;
import org.pcollections.PVector;
import org.shedlang.compiler.sources.Source;
import org.shedlang.compiler.sources.Sources;
-import org.shedlang.compiler.types.Effect;
-import org.shedlang.compiler.types.Type;
-import org.shedlang.compiler.types.Types;
+import org.shedlang.compiler.types.*;
import java.util.List;
import java.util.Optional;
@@ -20,8 +18,38 @@ public record TypedFunctionDefinitionNode(
TypedTypeLevelExpressionNode<Type> returnType,
Set<String> freeVariables,
List<TypedFunctionStatementNode> body,
+ FunctionType type,
Source source
) implements TypedNamespaceStatementNode {
+ public TypedFunctionDefinitionNode(
+ String name,
+ TypedParamsNode params,
+ Optional<TypedTypeLevelExpressionNode<Effect>> effect,
+ TypedTypeLevelExpressionNode<Type> returnType,
+ Set<String> freeVariables,
+ List<TypedFunctionStatementNode> body,
+ Source source
+ ) {
+ this(
+ name,
+ params,
+ effect,
+ returnType,
+ freeVariables,
+ body,
+ new FunctionType(
+ params.positional().stream()
+ .map(param -> param.type().value())
+ .toList(),
+ params.named().stream()
+ .map(param -> new NamedParam(param.name(), param.type().value()))
+ .toList(),
+ returnType.value()
+ ),
+ source
+ );
+ }
+
public static Builder builder() {
return new Builder(
"f",