lib/MissMatch.js
function bind(n,p,v) {
    var m = p(v);
    if(m.result) {
       // Throw an exception if the same name is bound multiple times. 
      if(bindingContext.hasOwnProperty(n)) {
        throw "Name '" + n + "' is already used in another binding.";
      }
         
      bindingContext[n] = m.obj ? m.obj[m.param] : m.param;
    }

    /**
     * When the rest of an array is matched, the binding value has to
     * be changed after executing bind. Thats because at bind time the
     * rest of the array is not known. Therefore the name of the last
     * binding is stored and can be retrieved in the continuing function.
     */
    m.this_binding = n;
    return m;
  }
function bind(n,p,v) {
    var m = p(v);
    if(m.result) {
       // Throw an exception if the same name is bound multiple times. 
      if(bindingContext.hasOwnProperty(n)) {
        throw "Name '" + n + "' is already used in another binding.";
      }
         
      bindingContext[n] = m.obj ? m.obj[m.param] : m.param;
    }

    /**
     * When the rest of an array is matched, the binding value has to
     * be changed after executing bind. Thats because at bind time the
     * rest of the array is not known. Therefore the name of the last
     * binding is stored and can be retrieved in the continuing function.
     */
    m.this_binding = n;
    return m;
  }
bind acts like a predicate but it also binds a variable to a
name and puts it in the binding context. The parameters are:
n: the binding name
p: the actual predicate associated with this binding
v: the value that this function is executed on.

The first two parameters have to be parameterized by
the comiler (curry). The fourth parameter is passed in at
runtime.