```-let lex (s:string) k = match s with
-  | "everyone" -> Node (Leaf "forall x", k "x")
-  | "someone" -> Node (Leaf "exists y", k "y")
-  | _ -> k s;;
-
-let sentence1 = Node (Leaf "John",
-                      Node (Node (Leaf "saw",
-                                  Leaf "everyone"),
-                            Leaf "yesterday"));;
-```
+ let lex (s:string) k = match s with + | "everyone" -> Node (Leaf "forall x", k "x") + | "someone" -> Node (Leaf "exists y", k "y") + | _ -> k s;; Then we can crudely approximate quantification as follows: -
```-# tree_monadize lex sentence1 (fun x -> x);;
-- : string tree =
-Node
- (Leaf "forall x",
-  Node (Leaf "John", Node (Node (Leaf "saw", Leaf "x"), Leaf "yesterday")))
-```
+ # let sentence1 = Node (Leaf "John", + Node (Node (Leaf "saw", + Leaf "everyone"), + Leaf "yesterday"));; + + # tree_monadize lex sentence1 (fun x -> x);; + - : string tree = + Node + (Leaf "forall x", + Node (Leaf "John", Node (Node (Leaf "saw", Leaf "x"), Leaf "yesterday"))) In order to see the effects of evaluation order, observe what happens when we combine two quantifiers in the same sentence: -
```-# let sentence2 = Node (Leaf "everyone", Node (Leaf "saw", Leaf "someone"));;
-# tree_monadize lex sentence2 (fun x -> x);;
-- : string tree =
-Node
- (Leaf "forall x",
-  Node (Leaf "exists y", Node (Leaf "x", Node (Leaf "saw", Leaf "y"))))
-```
+ # let sentence2 = Node (Leaf "everyone", Node (Leaf "saw", Leaf "someone"));; + # tree_monadize lex sentence2 (fun x -> x);; + - : string tree = + Node + (Leaf "forall x", + Node (Leaf "exists y", Node (Leaf "x", Node (Leaf "saw", Leaf "y")))) The universal takes scope over the existential. If, however, we -replace the usual tree_monadizer with tree_monadizer_rev, we get +replace the usual `tree_monadizer` with `tree_monadizer_rev`, we get inverse scope: -
```-# tree_monadize_rev lex sentence2 (fun x -> x);;
-- : string tree =
-Node
- (Leaf "exists y",
-  Node (Leaf "forall x", Node (Leaf "x", Node (Leaf "saw", Leaf "y"))))
-```