Add non-generic choosing logic.
Generalize the choosing logic.
Add the `join` combinator.
Make `map2` in terms of `flatMap` and `unit`. Add some comments.