this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add tree_fold

+14 -9
+14 -9
lib/Concrete_syntax.ml
··· 13 13 14 14 type cursor = {offset: offset; layer: cursor layer} 15 15 16 - val localise_tree : offset:offset -> tree -> cursor * offset 16 + val tree_fold : 17 + token:(token -> 'a) -> node:(node_info -> 'a list -> 'a) -> tree -> 'a 18 + 19 + val tree_cursor : offset:offset -> tree -> cursor 17 20 val tree_content : tree -> content 18 21 end 19 22 ··· 65 68 let node, offset = localise_node ~offset node in 66 69 (Node node, offset) 67 70 68 - let rec tree_content (Tree layer) = tree_layer_content layer 71 + let rec tree_fold ~token ~node (Tree layer) = 72 + match layer with 73 + | Token tok -> token tok 74 + | Node n -> node n.info (List.map (tree_fold ~token ~node) n.children) 69 75 70 - and tree_layer_content : tree layer -> content = function 71 - | Token tok -> tok.content 72 - | Node node -> tree_node_content node 76 + let tree_cursor ~offset tree = fst (localise_tree ~offset tree) 73 77 74 - and tree_node_content (node : tree node) : content = 75 - List.fold_left 76 - (fun acc tree -> I.Content.S.append acc (tree_content tree)) 77 - I.Content.S.empty node.children 78 + let tree_content tree = 79 + tree_fold 80 + ~token:(fun tok -> tok.content) 81 + ~node:(fun _ -> List.fold_left I.Content.S.append I.Content.S.empty) 82 + tree 78 83 end