 	/// It produces a signal that sends the property's current value,
 	/// followed by all changes over time. It completes when the property
 	/// has deinitialized, or has no further change.
+	///
+	/// - note: If `self` is a composed property, the producer would be
+	///         bound to the lifetime of its sources.
 	var producer: SignalProducer<Value, NoError> { get }
 
 	/// A signal that will send the property's changes over time. It
 	/// completes when the property has deinitialized, or has no further
 	/// change.
+	///
+	/// - note: If `self` is a composed property, the signal would be
+	///         bound to the lifetime of its sources.
 	var signal: Signal<Value, NoError> { get }
 }
 

/// one or more properties, a producer, or a signal. It can be created using
/// property composition operators, `Property(_:)` or `Property(initial:then:)`.
///
/// It respects and have no effect on the lifetime of its root sources. In other
/// words, the producer and signal of a composed property could complete before
/// or outlive the composed property, depending on its sources and the
/// composition.
///
/// Note that composed properties do not retain any of its sources.
public final class Property<Value>: PropertyProtocol {

	}
}

// Property operators.
//
// A composed property is a transformed view of its sources, and does not
// own its lifetime. Its producer and signal are bound to the lifetime of
// its sources.

extension PropertyProtocol {
	/// Lifts a unary SignalProducer operator to operate upon PropertyProtocol instead.
	fileprivate func lift<U>(_ transform: @escaping (SignalProducer<Value, NoError>) -> SignalProducer<U, NoError>) -> Property<U> {
