Commits

Anonymous committed ed3eb25

+ lazy_rec_data

Comments (0)

Files changed (1)

 open Printf
 ;
 
+value (lazy_rec_data : (Lazy.t 'a -> 'a) -> 'a) func =
+  let rec lazy_self = lazy (func lazy_self)
+  in
+    try
+      Lazy.force lazy_self
+    with
+    [ CamlinternalLazy.Undefined -> failwith
+        "lazy_rec_data: reference to not constructed yet 'self'"
+    ]
+;
+
 module StdLazy = Lazy
 ;
 
 ;
 
 
-value closure func nodes =
+value _closure_recdata_old func nodes =
   let lazyres =
   recdata
     (fun get_self ->
 ;
 
 
+(* todo: lazy_rec_data -- to functor maybe. *)
+
+value closure func nodes =
+  let lazy_res =
+    lazy_rec_data
+      (fun lazy_self ->
+         Array.map
+           (fun n ->
+             { Lazy.l = n.node_val.name
+             ; v = lazy
+                (
+                let self = StdLazy.force lazy_self in
+                List.fold_left
+                  (fun acc link ->
+                     func acc (Lazy.force self.(link))
+                  )
+                  n.node_val
+                  n.links
+                )
+             }
+           )
+           nodes
+      )
+  in
+    Array.map Lazy.force lazy_res
+;
+
+
 value sum nodes = closure
   (fun a b ->
      { int_val = a.int_val + b.int_val
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.