 			})
 		}
 	}
-}
-
-/// Maps each event from `producer` to a new producer, then
-/// `merge`s the resulting producers together.
-public func mergeMap<T, U, E>(transform: T -> SignalProducer<U, E>)(producer: SignalProducer<T, E>) -> SignalProducer<U, E> {
-	return producer |> map(transform) |> merge
 }
 
 /// Repeats `producer` a total of `count` times.


/// `concat`s `next` onto `producer`.
public func concat<T, E>(next: SignalProducer<T, E>)(producer: SignalProducer<T, E>) -> SignalProducer<T, E> {
	return SignalProducer(values: [producer, next]) |> concat
}

/// Maps each event from `producer` to a new producer, then
/// concatenates the resulting producers together.
public func concatMap<T, U, E>(transform: T -> SignalProducer<U, E>)(producer: SignalProducer<T, E>) -> SignalProducer<U, E> {
    return producer |> map(transform) |> concat
}

/// Returns a producer that forwards values from the latest producer sent on

///
/// The returned signal completes only when `producer` and all signals
/// emitted from `producer` complete.
private func concat<T, E>(producer: SignalProducer<SignalProducer<T, E>, E>) -> SignalProducer<T, E> {
	return SignalProducer { observer, disposable in
		let state = ConcatState(observer: observer, disposable: disposable)

