docs: function liftContext(ctx, func) {
    if (!ctx.pure) {
      throw new Error("no monad's definition is provided");
    }
    return function() {
      var saved;
      saved = context;
      context = ctx;
      try {
        return func.apply(null, arguments);
      } finally {
        context = saved;
      }
    };
  }