summaryrefslogtreecommitdiff
path: root/examples/02-sum
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-02 09:33:20 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-02 09:33:20 +0100
commit5d76fa1b86ff1bd15b9c6b546916bc03c9d9b9b4 (patch)
treec217496a632957cdeea37de3dd7106be2458c385 /examples/02-sum
parent3e1e789ab04226af17f58635be6367e69d9b655b (diff)
Add example for sum types
Diffstat (limited to 'examples/02-sum')
-rw-r--r--examples/02-sum/hobgoblin.json51
-rw-r--r--examples/02-sum/output/java/.gitignore2
-rw-r--r--examples/02-sum/output/java/pom.xml39
-rw-r--r--examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java22
-rw-r--r--examples/02-sum/src/shapes.hob14
5 files changed, 78 insertions, 0 deletions
diff --git a/examples/02-sum/hobgoblin.json5 b/examples/02-sum/hobgoblin.json5
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/examples/02-sum/hobgoblin.json5
@@ -0,0 +1 @@
+{}
diff --git a/examples/02-sum/output/java/.gitignore b/examples/02-sum/output/java/.gitignore
new file mode 100644
index 0000000..ff511d4
--- /dev/null
+++ b/examples/02-sum/output/java/.gitignore
@@ -0,0 +1,2 @@
+/src/gen/
+/target/
diff --git a/examples/02-sum/output/java/pom.xml b/examples/02-sum/output/java/pom.xml
new file mode 100644
index 0000000..7493667
--- /dev/null
+++ b/examples/02-sum/output/java/pom.xml
@@ -0,0 +1,39 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.zwobble.hobgoblin.examples</groupId>
+ <artifactId>example</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <maven.compiler.source>25</maven.compiler.source>
+ <maven.compiler.target>25</maven.compiler.target>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>3.6.1</version>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/gen/java</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java b/examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java
new file mode 100644
index 0000000..41522e6
--- /dev/null
+++ b/examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java
@@ -0,0 +1,22 @@
+package org.zwobble.example;
+
+import org.zwobble.example.types.shapes.Shape;
+import org.zwobble.example.types.shapes.Rectangle;
+import org.zwobble.example.types.shapes.Triangle;
+
+public class Main {
+ public static void main() {
+ Shape shape = createShape();
+ var area = switch (shape) {
+ case Rectangle(var width, var height) ->
+ width * height;
+
+ case Triangle(var width, var height) ->
+ width * height / 2;
+ };
+ }
+
+ private static Shape createShape() {
+ return new Rectangle(10, 25);
+ }
+}
diff --git a/examples/02-sum/src/shapes.hob b/examples/02-sum/src/shapes.hob
new file mode 100644
index 0000000..08336c5
--- /dev/null
+++ b/examples/02-sum/src/shapes.hob
@@ -0,0 +1,14 @@
+sum Shape {
+ variant Rectangle;
+ variant Triangle;
+}
+
+struct Rectangle {
+ field width: Int32;
+ field height: Int32;
+}
+
+struct Triangle {
+ field width: Int32;
+ field height: Int32;
+}