 		}
 	}
 
+	/// Create an `MutableValidatingProperty` that validates mutations before
+	/// committing them.
+	///
+	/// If `success` is returned by `validator`, the associated value would be
+	/// committed to `inner`. Otherwise, the failure would be exposed by the
+	/// `result` property of `self`.
+	///
+	/// - parameters:
+	///   - initial: The initial value of the property. It is not required to
+	///              pass the validation as specified by `validator`.
+	///   - other: The property that `validator` depends on.
+	///   - validator: The closure to invoke for any proposed value to `self`.
 	public convenience init<Other: PropertyProtocol>(
 		_ initial: Value,
 		with other: Other,

import Result

/// An editor that monitors, validates and commits changes to its root property.
///
/// Validation failure raised by intermediate editors would back-propagate to
/// the outer editors.
///
/// ```
/// let outer = root
///   .validate { $0 == "Valid" ? nil : .intermediateInvalid }
///   .validate { $0.hasSuffix("Valid") ? nil : .outerInvalid }
///
/// outer.attemptSet("isValid")
///
/// intermediate.result.value // `.failure("isValid", .intermediateInvalid)`
/// outer.result.value        // `.failure("isValid", .intermediateInvalid)`
/// ```
///
/// Changes originated from the intermediate editors and the root property are
/// monitored and would trigger validations automatically.
///
/// ```
/// let root = MutableProperty("Valid")

		self.init(MutableProperty(initial), with: other, validator)
	}

	/// Create an `MutableValidatingProperty` that presents a mutable validating
	/// view for an inner mutable property.
	///
	/// If `success` is returned by `validator`, the associated value would be
	/// committed to `inner`. Otherwise, the failure would be exposed by the
	/// `result` property of `self`.
	///
	/// - parameters:
	///   - inner: The inner property which validated values are committed to.
	///   - other: The property that `validator` depends on.
	///   - validator: The closure to invoke for any proposed value to `self`.
	public convenience init<U, E: Swift.Error>(
		_ inner: MutableProperty<Value>,
		with other: MutableValidatingProperty<U, E>,
