12.1. Maybe tasks? In the questions section of Chapter 8, Connecting Functions - Pipelining and Composition, a question had to do with getting the pending tasks for a person, but taking into account errors or border situations, such as the possibility that the selected person might not even exist. Redo that exercise, but using Maybe or Either monads to simplify that coding.
12.2. Extending your trees. In order to get a more complete implementation of our functional binary search trees, implement the following functions:
- Calculate the tree's height -- or, equivalently, the maximum distance from the root to any other node
- List all the tree's keys, in ascending order
- Delete a key from a tree
12.3. Functional lists. In the same spirit of the binary trees, implement functional lists. Since a list is defined to be either empty or a node (head) followed by another...