Create gen/let for syntax sugar and to address fmap/bind confusion
Users who are not big fans of monads may find the names of and distinction between fmap and bind to be confusing. A combination of the two can exist, where users can return either a value or a generator and the system chooses to use fmap or bind automatically. The downside of this approach is it is ambiguous (i.e., a user cannot use it to generate a generator, though this is admittedly uncommon), and it offends people who like thinking about the precise types of functions (see this criticism in particular regarding a similar behavior in jQuery). However, neither of these are very serious restrictions, since falling back to fmap and bind is always an option.
Writing complex generators can be very syntactically convoluted, with heavy nesting and confusing structure especially caused by the opposite argument order of fmap and bind. In the same way that clojure.core/let provides a flatter (especially when multiple clauses are present) syntax for something that can technically be accomplished using fn, a macro could flatten the syntax of generators that make a lot of use of bind and fmap while providing the same functionality.
This feature supposedly exists in the erlang quickcheck.
Another attempt at solving the same problem is test.chuck's for macro.
A macro in the generators namespace called let, which uses bind for multiple clauses, and whose body is processed with bind or fmap depending on whether it is a generator.
gen/let and test.chuck's for differ in a couple independent ways, so it might be helpful to be explicit about what the different options are here. I also included Erlang's let, based on how I imagine it works.
Subsequent clauses handled with bind
Body uses bind if it's a generator
Supports binding intermediate values
Supports parallel generators (via tuple)
Added gen/let on master