code: function defaults(defs,opts) {
    if (!opts)
      opts = {}
    if (opts.context == null)
      opts.context = true;
    if (opts.coerce == null)
      opts.coerce = true;
    completeMonad(defs);
    if (opts.control === "token")
      defs = M.addControlByToken(defs);
    if (opts.wrap)
      defs = M.wrap(defs,opts.wrap);
    if (opts.coerce)
      defs = M.addCoerce(defs);
    if (opts.context)
      defs = M.addContext(defs, opts.context === "run");
    if (opts.wrap)
      M.completePrototype(defs,opts.wrap.prototype);
    return defs;
  }
docs: Runs definitions transformations based on specified set of options.
  
  Options:
  * wrap - constructor function used for wrapped value,
  it should construct objects with inner field
  * context - boolean or "run" string for only wrapping run method,
  default is true
  * coerce - boolean for adding coercions to functions returning
  monadic values, default is true
  * control - string "token" for adding control operators implementation
  using special token passing
  @function M.defaults
  @param {MonadDict} inner original monad definition
  @param {Object} options
  @return {MonadDict}