+Write a function `sum_leaves` that computes the sum of all the leaves in an int
+tree.
+
+Write a function `in_order` : τ tree → τ list that computes the in-order
+traversal of a binary tree. You may assume the above encoding of lists; define
+any auxiliary functions you need.
+-->
+
+
+Baby monads
+-----------
+
+Read the material on dividing by zero/towards monads from <strike>the end of lecture
+notes for week 6</strike> the start of lecture notes for week 7, then write a function `lift'` that generalized the
+correspondence between + and `add'`: that is, `lift'` takes any two-place
+operation on integers and returns a version that takes arguments of type `int
+option` instead, returning a result of `int option`. In other words, `lift'`
+will have type:
+
+ (int -> int -> int) -> (int option) -> (int option) -> (int option)
+
+so that `lift' (+) (Some 3) (Some 4)` will evalute to `Some 7`.
+Don't worry about why you need to put `+` inside of parentheses.
+You should make use of `bind'` in your definition of `lift'`:
+
+ let bind' (u: int option) (f: int -> (int option)) =
+ match u with None -> None | Some x -> f x;;