 
 /// A pull-driven stream that executes work when an enumerator is attached.
 class Enumerable<T> {
+	/// Something capable of receiving the events sent by an Enumerable.
+	///
+	/// After receiving `Error` or `Completed` events, Enumerators should ignore
+	/// all further events.
 	typealias Enumerator = Event<T> -> ()
 
 	@final let _enumerate: Enumerator -> Disposable?
+
+	/// Initializes an Enumerable that will run the given action whenever an
+	/// Enumerator is attached, and optionally return a disposable that can be
+	/// used to cancel the work.
 	init(enumerate: Enumerator -> Disposable?) {
 		_enumerate = enumerate
 	}
 
+	/// Creates an Enumerable that will immediately complete.
 	@final class func empty() -> Enumerable<T> {
 		return Enumerable { send in
 			send(.Completed)

		}
	}

	@final func ignoreValues() -> Enumerable<()> {
		return Enumerable<()> { send in
			return self.enumerate { event in

		}
	}

	/// Performs the given action whenever the Enumerable yields an Event.
	@final func doEvent(action: Event<T> -> ()) -> Enumerable<T> {
		return Enumerable { send in
			return self.enumerate { event in
