     @withHandler (event) ->
       f(event.value()) if event.hasValue()
       @push event
-  takeUntil: (stopper) =>
-    src = this
-    @withSubscribe (sink) ->
-      unsubscribed = false
-      unsubSrc = nop
-      unsubStopper = nop
-      unsubBoth = -> unsubSrc() ; unsubStopper() ; unsubscribed = true
-      srcSink = (event) ->
-        if event.isEnd()
-          unsubStopper()
-          sink event
-          Bacon.noMore
-        else
-          event.onDone ->
-            if !unsubscribed
-              reply = sink event
-              if reply == Bacon.noMore
-                unsubBoth()
-          Bacon.more
-      stopperSink = (event) ->
-        if event.isError()
-          Bacon.more
-        else if event.isEnd()
-          Bacon.noMore
-        else
-          unsubSrc()
-          sink end()
-          Bacon.noMore
-      unsubSrc = src.subscribe(srcSink)
-      unsubStopper = stopper.subscribe(stopperSink) unless unsubscribed
-      unsubBoth
 
   skip : (count) ->
     @withHandler (event) ->

        [new Some(event.value()), [event]]
      else
        [prev, []]
  withStateMachine: (initState, f) ->
    state = initState
    @withHandler (event) ->

        success = false
        try
          pushing = true
          tmp = subscriptions
          for sub in tmp
            reply = sub.sink event
