   awaiting: (other) ->
     this.toEventStream().map(true).merge(other.toEventStream().map(false)).toProperty(false)
 
+  withDescription: ->
+    this.withHandler describe(arguments...), (event) -> @push event
 
 Observable :: reduce = Observable :: fold
 

  if streams.length
    sources = for s in streams
      new Source(s, true, false, s.subscribeInternal)
    Bacon.when(sources, ((xs...) -> xs), describe("combineAsArray", streams)).scan(None, latterF, true, describe("combineAsArray", streams))
  else
    Bacon.constant([])


    new Property describe(desc || "scan", this, seed, f), subscribe

  fold: (seed, f) =>
    @scan(seed, f).sampledBy(@filter(false).mapEnd().toProperty()).withDescription("fold", this, seed, f)

  zip: (other, f = Array) ->
    Bacon.zipWith([this,other], f)
