code: function an (type, msg) {
      if (msg) flag(this, 'message', msg);
      type = type.toLowerCase();
      var obj = flag(this, 'object')
        , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';
  
      this.assert(
          type === _.type(obj)
        , 'expected #{this} to be ' + article + type
        , 'expected #{this} not to be ' + article + type
      );
    }
docs: ### .a(type)
  
  The `a` and `an` assertions are aliases that can be
  used either as language chains or to assert a value's
  type.
  
  // typeof
  expect('test').to.be.a('string');
  expect({ foo: 'bar' }).to.be.an('object');
  expect(null).to.be.a('null');
  expect(undefined).to.be.an('undefined');
  
  // language chain
  expect(foo).to.be.an.instanceof(Foo);
  
  @name a
  @alias an
  @param {String} type
  @param {String} message _optional_
  @api public