docs: function getModule (name, methods, options) {
      // throw error on invalid name
      requireValidName(name)
      // get validated options, set defaults
      options = getValidOptions(options, true)
      // if no methods were passed then return module instance
      if (!defined(methods)) {
          // throw error if module not defined
          if (!defined(immutable.modules[name])) {
              throw new Error(`module error: module not found ${name}`)
          }
          // return module
          return immutable.modules[name]
      }
      // if methods were passed throw error if module already defined
      if (defined(immutable.modules[name]) && !options.allowOverride) {
          throw new Error(`module error: module already defined ${name}`)
      }
      // create new module
      var module = immutable.modules[name] = new ImmutableCoreModule(name, options)
      // add methods to object
      _.each(methods, (method, methodName) => {
          // create new method use module options
          module.method(methodName, method, module.meta.options)
          // bind to method if it exists
          doBindForMethod(`${name}.${methodName}`)
      })
      // return module
      return module
  }