 	/// The resulting producer will complete when:
 	/// 1. The producer-of-producers and the first "alive" producer has completed.
 	/// 2. The producer-of-producers has completed without inner producer being "alive".
-	case race
-
-	public static func ==(left: FlattenStrategy, right: FlattenStrategy) -> Bool {
-		switch (left, right) {
-		case (.latest, .latest):
-			return true
-
-		case (.concurrent(let leftLimit), .concurrent(let rightLimit)):
-			return leftLimit == rightLimit
-
-		default:
-			return false
-		}
-	}
+	public static let race = FlattenStrategy(kind: .race)
 }
 
 extension Signal where Value: SignalProducerConvertible, Error == Value.Error {

	/// - parameters:
	///	  - strategy: Strategy used when flattening signals.
	public func flatten(_ strategy: FlattenStrategy) -> Signal<Value.Value, Error> {
		switch strategy {
		case .concurrent(let limit):
			return self.concurrent(limit: limit)


	/// - parameters:
	///   - strategy: Strategy used when flattening signals.
	public func flatten(_ strategy: FlattenStrategy) -> Signal<Value.Value, Value.Error> {
		switch strategy.kind {
		case .concurrent(let limit):
			return self.concurrent(limit: limit)

