 		return _value()
 	}
 
-	/// A producer for Signals that will send the wrapped property's current value,
-	/// followed by all changes over time, then complete when the wrapped property has
-	/// deinitialized.
+	/// A producer that sends the property's current value, followed by all changes
+	/// over time.
 	public var producer: SignalProducer<Value, NoError> {
 		return _producer()
 	}
 
-	/// A signal that will send the wrapped property's changes over time, then complete
-	/// when the wrapped property has deinitialized.
+	/// A signal that sends the property's changes over time.
 	///
 	/// It is strongly discouraged to use `signal` on any transformed property.
 	public var signal: Signal<Value, NoError> {
 		return _signal()
 	}
 
-	/// Initializes a property as a read-only view of the given property.
+	/// Initializes a constant property.
 	public init(value: Value) {
 		sources = []
 		disposable = nil

		_signal = { Signal<Value, NoError>.empty }
	}

	/// Initializes a property as a read-only view of the given property.
	public init<P: PropertyProtocol where P.Value == Value>(_ property: P) {
		sources = Property.capture(property)
		disposable = nil

	}
}

/// A read-only property that can be observed for its changes over time. There are
/// three categories of read-only property:
///
/// # Constant property
/// Created by `Property(value:)`, the producer and signal of a constant
/// property would complete immediately when it is initialized.
///
/// # Existential property
/// Created by `Property(_:)`, an existential property passes through the
/// behavior of the wrapped property.
///
/// # Composed property
/// Created by either the compositional operators in `PropertyProtocol`, or
/// `Property(initial:followingBy:)`, a composed property presents a
/// composed view of its source, which can be a set of properties,
/// a producer, or a signal.
///
/// A composed property respects the lifetime of its source rather than its own.
/// In other words, its producer and signal can outlive the property itself, if
/// its source outlives it too.
public struct Property<Value>: PropertyProtocol {
	private let sources: [Any]
	private let disposable: Disposable?
