docs: function FileResource( pkg, config ) {
  	var key,
  		resource = this,
  		dir = pkg.getDirectory(),
  		cfg = { files: [] };
  
  	// Normalize configuration
  	if ( typeof config === 'string' ) {
  		cfg.files.push( config );
  	} else if ( Array.isArray( config ) ) {
  		cfg.files = cfg.files.concat( config );
  	} else {
  		for ( key in config ) {
  			if ( key === 'file' || key === 'files' ) {
  				cfg.files = cfg.files.concat(
  					Array.isArray( config[key] ) ? config[key] : [ config[key] ]
  				);
  			} else {
  				cfg[key] = config[key];
  			}
  		}
  	}
  	cfg.files = cfg.files.map( function ( file ) {
  		return path.join( dir, file );
  	} );
  
  	// Parent constructor
  	FileResource.super.call( this, pkg, cfg );
  
  	// Properties
  	this.versionGenerator = function *() {
  		return yield ay( cfg.files )
  			.reduce( resource.reduceFileToMaximumModifiedTime, 1 );
  	};
  	this.contentGenerator = function *( options ) {
  		return yield ay( cfg.files )
  			.map( function *( file ) {
  				return yield resource.mapFileToContent( file, options );
  			} )
  			.reduce( resource.reduceContentToConcatenatedContent, '' );
  	};
  }