   else
     new Source(s, true, true)
 
-describe = (context, desc, args...) -> 
-  if context instanceof Desc
-    context
-  else if desc instanceof Desc
-    desc
+describe = (context, method, args...) -> 
+  if (context || method) instanceof Desc
+    context || method
   else
+    new Desc(context, method, args)
+
+class Desc
+  constructor: (context, method, args) ->
     findDeps = (x) ->
       if isArray(x)
         _.flatMap findDeps, x

  fmap: -> this
  apply: -> this
  toString: -> "<error> #{@error}"

withDescription = (desc..., obs) ->
  describe(desc...).apply(obs)

class Observable
  constructor: (desc) ->

        [x]
      else
        []
    @apply = (obs) ->
      obs.deps = -> findDeps(args)
      obs.toString = -> _.toString(context) + "." + _.toString(method) + "(" + _.map(_.toString, args) + ")"
      obs.desc = -> { context, method, args }
      obs

withDescription = (desc..., obs) ->
  describe(desc...).apply(obs)

Bacon.when = (patterns...) ->
    return Bacon.never() if patterns.length == 0
