     }
 }
 
-public func groupBy<T, Key: Hashable>(groupingClosure: (T) -> Key) -> (upstream: Stream<T>) -> Stream<(Key, Stream<T>)>
+public func groupBy<T, Key: Hashable>(_ groupingClosure: (T) -> Key) -> (upstream: Stream<T>) -> Stream<(Key, Stream<T>)>
 {
     return { (upstream: Stream<T>) in
         return Stream<(Key, Stream<T>)> { progress, fulfill, reject, configure in

    }.name("mergeInner")
}

public func concatInner<T>(upstream: Stream<Stream<T>>) -> Stream<T>
{
    return Stream<T> { progress, fulfill, reject, configure in
        

}

/// a.k.a Rx.repeat
public func times<T>(_ repeatCount: Int) -> (upstreamProducer: Stream<T>.Producer) -> Stream<T>.Producer
{
    return { (upstreamProducer: Stream<T>.Producer) -> Stream<T>.Producer in
        
