   fmap: -> this
   apply: -> this
   toString: -> "<error> #{@error}"
+
+withDescription = (desc..., obs) ->
+  desc = describe(desc...)
+  obs.deps = desc.deps
+  obs.toString = desc.toString
+  obs
 
 class Observable
   constructor: (desc) ->


  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)
    withDescription("combineAsArray", streams, Bacon.when(sources, ((xs...) -> xs), describe("combineAsArray", streams)).toProperty())
  else
    Bacon.constant([])

