aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/lander.v
diff options
context:
space:
mode:
authorIndrajith K L2022-12-03 17:00:20 +0530
committerIndrajith K L2022-12-03 17:00:20 +0530
commitf5c4671bfbad96bf346bd7e9a21fc4317b4959df (patch)
tree2764fc62da58f2ba8da7ed341643fc359873142f /v_windows/v/examples/lander.v
downloadcli-tools-windows-master.tar.gz
cli-tools-windows-master.tar.bz2
cli-tools-windows-master.zip
Adds most of the toolsHEADmaster
Diffstat (limited to 'v_windows/v/examples/lander.v')
-rw-r--r--v_windows/v/examples/lander.v62
1 files changed, 62 insertions, 0 deletions
diff --git a/v_windows/v/examples/lander.v b/v_windows/v/examples/lander.v
new file mode 100644
index 0000000..ad2600d
--- /dev/null
+++ b/v_windows/v/examples/lander.v
@@ -0,0 +1,62 @@
+// Example of sum types
+// Models a landing craft leaving orbit and landing on a world
+import rand
+import time
+
+struct Moon {
+}
+
+struct Mars {
+}
+
+fn (m Mars) dust_storm() bool {
+ return rand.int() >= 0
+}
+
+struct Venus {
+}
+
+type World = Mars | Moon | Venus
+
+struct Lander {
+}
+
+fn (l Lander) deorbit() {
+ println('leaving orbit')
+}
+
+fn (l Lander) open_parachutes(n int) {
+ println('opening $n parachutes')
+}
+
+fn wait() {
+ println('waiting...')
+ time.sleep(1 * time.second)
+}
+
+fn (l Lander) land(w World) {
+ if w is Mars {
+ for w.dust_storm() {
+ wait()
+ }
+ }
+ l.deorbit()
+ match w {
+ Moon {} // no atmosphere
+ Mars {
+ // light atmosphere
+ l.open_parachutes(3)
+ }
+ Venus {
+ // heavy atmosphere
+ l.open_parachutes(1)
+ }
+ }
+ println('landed')
+}
+
+fn main() {
+ l := Lander{}
+ l.land(Venus{})
+ l.land(Mars{})
+}