                 chan.emitIfOpen(.Done())
             }
         }
-        outer.open(chan.calleeContext) { ( base = $0 )
-            return { e in
+        outer.open(chan.calleeContext) {
+            base = $0
+            base!.subscribe { e in
                 if let x = e.error {
                     chan.emitIfOpen(.Fail(x))
                 }

                base = nil
                for e in map.values { e.close() }
            }
            self.open(outer.calleeContext) { (base = $0)
                return { e in
                    switch e {
                    case .Next(let x):
                        let k = f(+x)

            }
            f(chan).open(chan.calleeContext) {
                base = $0
                base!.subscribe { chan.emitIfOpen($0) }
            }
        }
    }
