   constructor: (@subscribe) ->
     super()
     combine = (other, leftSink, rightSink) => 
-      myVal = Bacon.none
-      otherVal = Bacon.none
+      myVal = None
+      otherVal = None
       new Property (sink) =>
         unsubscribed = false
         unsubMe = nop

      unsubBoth

  toProperty: (initValue) ->
    initValue = Bacon.none if arguments.length == 0
    @scan(initValue, latter)

  scan: (seed, f) ->
    acc = seed
    f = toCombinator(f)

    handleEvent = (event) -> 
      acc = f(acc, event.value) if event.hasValue()
      @push event.apply(acc)
    d = new Dispatcher(@subscribe, handleEvent)
    subscribe = (sink) ->
      reply = sink initial(acc) if acc != Bacon.none
      d.subscribe(sink) unless reply == Bacon.noMore
    new Property(subscribe)


class PropertyDispatcher extends Dispatcher
  constructor: (subscribe, handleEvent) ->
    super(subscribe, handleEvent)
    current = Bacon.None
    push = @push
    subscribe = @subscribe
    @push = (event) =>
      if event.hasValue()
        current = new Some(event.value)
      push.apply(this, [event])
    @subscribe = (sink) =>
      reply = current.filter(@hasSubscribers).map((val) -> sink initial(val))
      if reply.getOrElse(Bacon.more) == Bacon.noMore
        nop
      else
        subscribe.apply(this, [sink])

class Bus extends EventStream
  constructor: ->
