Makes sense. I have generalized these to accept any traversable container by passing a for-each procedure to take apart the container and a constructor to reassemble it.  I have also added an Either equivalent.

On Mon, Mar 30, 2020 at 12:07 PM Arvydas Silanskas <xxxxxx@gmail.com> wrote:
I think it's missing sequencing, for which I personally reach quite often when working with such monadic container types. Eg. for Maybe: 

(sequence-maybe lst) 

if all elements in lst are Just, returns Just of list, whose elements correspond to unwrapped values in lst. If any element in lst is Nothing, returns Nothing.

(sequence-maybe (list (just 'a) (just 'b))) == (just (list 'a 'b))
(sequence-maybe (list (just 'a) (nothing))) == (nothing)