]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Lazy1.scl
New SCL syntax <<effects>>
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / scl / Lazy1.scl
diff --git a/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Lazy1.scl b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Lazy1.scl
new file mode 100644 (file)
index 0000000..7989992
--- /dev/null
@@ -0,0 +1,36 @@
+import "Prelude"
+import "Lazy"
+
+data Node = Node {
+    name :: String,
+    children :: Lazy <<Proc>> [Node]
+}
+
+root = genNode ""
+  where
+    genNode name = do
+        print "genNode \(name)"
+        Node {
+            name,
+            children = lazy [genNode (name + "A"), genNode (name + "B")]
+        }
+
+nameOf Node { name } = name
+childrenOf Node { children } = force children
+
+main = for (childrenOf root) $ \c ->
+    for (childrenOf c) $ \c2 ->
+        print "visit \(nameOf c2)"
+--
+genNode 
+genNode A
+genNode B
+genNode AA
+genNode AB
+visit AA
+visit AB
+genNode BA
+genNode BB
+visit BA
+visit BB
+()
\ No newline at end of file