+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