       combinator = toCombinator combinator
     else
       lazy = true
-      combinator = (f) -> f()
+      combinator = (f) -> f.value()
     thisSource = new Source(this, false, lazy)
     samplerSource = new Source(sampler, true, lazy)
     stream = Bacon.when([thisSource, samplerSource], combinator)

          for p in pats
            if match(p)
              #console.log "match", p
              functions = (sources[i.index].consume() for i in p.ixs)
              reply = sink trigger.e.apply ->
                values = (fun() for fun in functions)
                p.f(values...)
              if triggers.length
                triggers = _.filter nonFlattened, triggers

  consume: ->
    values = @queue
    @queue = []
    {value: -> values}
  push: (x) -> @queue.push(x.value())
  hasAtLeast: -> true

Source.isTrigger = (s) ->
