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/Effect.java2
-rw-r--r--src/main/java/org/shedlang/compiler/types/EffectFunction.java4
-rw-r--r--src/main/java/org/shedlang/compiler/types/UserDefinedEffect.java13
3 files changed, 18 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/types/Effect.java b/src/main/java/org/shedlang/compiler/types/Effect.java
index 7e8bc203..2a583320 100644
--- a/src/main/java/org/shedlang/compiler/types/Effect.java
+++ b/src/main/java/org/shedlang/compiler/types/Effect.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.types;
-public sealed interface Effect extends TypeLevelValue permits IoEffect, NoneEffect {
+public sealed interface Effect extends TypeLevelValue permits IoEffect, NoneEffect, UserDefinedEffect {
}
diff --git a/src/main/java/org/shedlang/compiler/types/EffectFunction.java b/src/main/java/org/shedlang/compiler/types/EffectFunction.java
new file mode 100644
index 00000000..c6e4db3f
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/types/EffectFunction.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.types;
+
+public record EffectFunction(String name, FunctionType type) {
+}
diff --git a/src/main/java/org/shedlang/compiler/types/UserDefinedEffect.java b/src/main/java/org/shedlang/compiler/types/UserDefinedEffect.java
new file mode 100644
index 00000000..d88ac200
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/types/UserDefinedEffect.java
@@ -0,0 +1,13 @@
+package org.shedlang.compiler.types;
+
+import java.util.List;
+
+public record UserDefinedEffect(
+ String name,
+ List<EffectFunction> functions
+) implements Effect {
+ @Override
+ public String describe() {
+ return name;
+ }
+}