docs: function (key, regexp, replacement, editor) {
              key = key.toLowerCase();
  
              return getPreviousKeyForEditing(key, editor)
              .then(bindr(Result.andThen, editOnlyWhenPreviousKeyExists))
              .then(bindr(Result.andThen, function (description) {
                  const old_message = description.message;
                  const new_message = old_message
                      .replace(regexp, replacement)
                      .replace(/\s+/, " ");
  
                  if (old_message === new_message) {
                      return Fail("unchanged");
                  }
  
                  if (new_message.length > maxMessageLength) {
                      return Fail("message-length-exceeded");
                  }
  
                  if (new_message === "") {
                      return Fail("no-message-left");
                  }
  
                  description.message = new_message;
                  description.editor = editor;
                  description.time = now();
  
                  return Ok(description);
              }))
              .then(bindr(Result.andThen, beforeUpdate))
              .then(bindr(Result.map, function (value) {
                  db.set(key, value);
                  return value;
              }));
          }