code: func parseInterfaceTypeDefinition(parser *Parser) (ast.Node, error) {
  	start := parser.Token.Start
  	description, err := parseDescription(parser)
  	if err != nil {
  		return nil, err
  	}
  	_, err = expectKeyWord(parser, lexer.INTERFACE)
  	if err != nil {
  		return nil, err
  	}
  	name, err := parseName(parser)
  	if err != nil {
  		return nil, err
  	}
  	directives, err := parseDirectives(parser)
  	if err != nil {
  		return nil, err
  	}
  	iFields, err := reverse(parser,
  		lexer.BRACE_L, parseFieldDefinition, lexer.BRACE_R,
  		false,
  	)
  	if err != nil {
  		return nil, err
  	}
  	fields := []*ast.FieldDefinition{}
  	for _, iField := range iFields {
  		if iField != nil {
  			fields = append(fields, iField.(*ast.FieldDefinition))
  		}
  	}
  	return ast.NewInterfaceDefinition(&ast.InterfaceDefinition{
  		Name:        name,
  		Description: description,
  		Directives:  directives,
  		Loc:         loc(parser, start),
  		Fields:      fields,
  	}), nil
  }
docs: /**
   * InterfaceTypeDefinition :
   *   Description?
   *   interface Name Directives? { FieldDefinition+ }
   */