code: function bind (bindType, signature, method) {
      // validate signature
      signature = getValidSignature(signature)
      // require valid bind method
      if (typeof method !== 'function' || !defined(method.meta)) {
          throw new Error('invalid bind method')
      }
      // create bind entry for module if it does not exist
      if (!defined(immutable.binds[signature.moduleName])) {
          immutable.binds[signature.moduleName] = {}
      }
      var moduleBinds = immutable.binds[signature.moduleName]
      // create bind entry for method if it does not exist
      if (!defined(moduleBinds[signature.methodName])) {
          moduleBinds[signature.methodName] = {}
      }
      var methodBinds = moduleBinds[signature.methodName]
      // create bind entry for bind type if it does not exist
      if (!defined(methodBinds[bindType])) {
          methodBinds[bindType] = {}
      }
      var bindTypeBinds = methodBinds[bindType]
      // throw error on override
      if (defined(bindTypeBinds[method.meta.signature]) && !immutable.defaultAllowOverride) {
          throw new Error(`bind error: method ${method.meta.signature} already bound ${bindType} to ${signature.signature}`)
      }
      // add bind method entry
      bindTypeBinds[method.meta.signature] = {
          bound: false,
          method: method,
      }
      // bind to method if it exists
      doBindForMethod(signature.signature)
      // return immutable
      return ImmutableCore
  }
docs: /* private functions 
  @function bind
  
  bind immutable module method to given immutable method signature.
  
  when bind is called the method will be added to the global bind store.
  
  if the target method is already defined then methods will be bound to it.
  if the target method has not yet been created then bind will occur if and
  when the method is created.
  
  @param {string} bindType - when and how to bind
  @param {string} signature - moduleName.functionName to bind to
  @param {function} method - function to bind
  
  @returns {ImmutableCore}
  
  @throws {Error}