 	///
 	/// After starting the returned producer, `readFD` should not be used
 	/// anywhere else, as it may close unexpectedly.
-	func transferReadsToProducer() -> SignalProducer<NSData, TaskError> {
+	func transferReadsToProducer() -> ReadProducer {
 		return SignalProducer { observer, disposable in
 			dispatch_group_enter(self.group)
 			let channel = dispatch_io_create(DISPATCH_IO_STREAM, self.readFD, self.queue) { error in


/// A private class used to encapsulate a Unix pipe.
private final class Pipe {
	/// The file descriptor for reading data.
	let readFD: Int32



					dispatch_group_enter(group)
					rawTask.terminationHandler = { nstask in
						func getProducer(property: AnyProperty<Aggregation?>) -> Pipe.ReadProducer {
							return property.producer
								.ignoreNil()
								.promoteErrors(TaskError.self)
