# ## Function: sequence # # Evaluates each action in sequence, left to right, collecting the # results. # # + type: (Monad m) => m -> [m a] -> m [a] export sequence = (m, ms) --> do return ms.reduce-right perform, m.of [] # where: function perform(m1, m2) => do x <- m1.chain xs <- m2.chain xs.push x m.of xs