aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-03 18:30:51 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-03 18:30:51 +0000
commitedb9d960f411d28e693237c46a2aadf72fdcc6e2 (patch)
tree1d73ec5dda90a0f66df139a303a485f73228ac8d /src/main/java
parent72779bc8003f07742a94f34853f2be94004a61ee (diff)
Add user defined effects to type system
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;
+ }
+}