```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"));;
```
Then we can crudely approximate quantification as follows:
```# tree_monadize sentence1 lex (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 sentence2 lex (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 inverse scope:
```# tree_monadize_rev sentence2 lex (fun x -> x);;
- : string tree =
Node
(Leaf "exists y",
Node (Leaf "forall x", Node (Leaf "x", Node (Leaf "saw", Leaf "y"))))
```