Improve sequence(). Monads usable with sequence are no longer implicitly
required to perform side effects idempotently.
In sequence(), reserve space in output sequence when appropritate.
Reimplement sequence() and map() in terms of new function
detail::sequence_impl().
Reimplement zip() in terms of detail::sequence_impl().
Remove brittle use of decltype(some_monad.state()) to get state_type.
Rewrite detail::sequence_impl() for clarity.
Grooming.
Reimplement map_unzip() in the style of detail::sequence_impl().
Reimplement filter() in the style of detail::sequence_impl().
Test and fix map_unzip().
Cruft removal.
Grooming.
Add Haskell function signatures to function docs.
Remove lift().
Beef up API docs a bit.
Change output to use Just/Nothing Haskell terminology.
Add free join(), and user-definable monad<>::join().
Remove is_monad*<>.
Test join(), and make it a lot eaiser to implement in user code.
empty -> nothing