 				})
 			}
 		}
+	}
+
+	/// Maps each value that the receiver sends to a new signal, then
+	/// concatenates the resulting signals together.
+	///
+	/// This is equivalent to map() followed by concat().
+	///
+	/// Returns a signal that will forward changes sequentially from each mapped
+	/// signal.
+	public func concatMap<U>(f: T -> ColdSignal<U>) -> ColdSignal<U> {
+		return map(f).concat(identity)
 	}
 
 	/// Concatenates the given signal after the receiver.

		}
	}

	/// Concatenates each inner signal with the previous and next inner signals.
	///
	/// evidence - Used to prove to the typechecker that the receiver is

		}
	}

	/// Maps each value that the receiver sends to a new signal, then merges the
	/// resulting signals together.
	///
	/// This is equivalent to map() followed by merge().
	///
	/// Returns a signal that will forward changes from all mapped signals as
	/// they arrive.
	public func mergeMap<U>(f: T -> ColdSignal<U>) -> ColdSignal<U> {
		return map(f).merge(identity)
	}

	/// Switches on a signal of signal, forwarding events from the
	/// latest inner signal.
	///
