12.1. Maybe tasks? In the Questions section of Chapter 8, Connecting Functions – Pipelining and Composition, a question (8.2) had to do with getting the pending tasks for a person while taking errors or border situations into account, such as the possibility that the selected person might not even exist. Redo that exercise but using Maybe or Either monads to simplify that code.
12.2. Extending your trees: 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 as binary trees, implement functional lists. Since a list is defined to be either empty or a node (head), followed by another...