whole_func_string: function thing(type, value) {
  	if (arguments.length < 2) {
  		if (instance(type, Thing)) {
  			return type;
  		}
  
  		value = type;
  		type = typeof value === 'string' || typeof value === 'number' || instance(value, RegExp) ?
  			'text' :
  			'unknown';
  	}
  
  	return instance(value, Promise) ?
  		value.then(
  			thing.bind(null, type)
  		) :
  		new Thing(type, value);
  }
func_code_string: function thing(type, value) {
  	if (arguments.length < 2) {
  		if (instance(type, Thing)) {
  			return type;
  		}
  
  		value = type;
  		type = typeof value === 'string' || typeof value === 'number' || instance(value, RegExp) ?
  			'text' :
  			'unknown';
  	}
  
  	return instance(value, Promise) ?
  		value.then(
  			thing.bind(null, type)
  		) :
  		new Thing(type, value);
  }
func_documentation_string: References given `value` as {@link #Thing|Thing} of given `type`.
  @param {string} type Thing {@link #Thing#type|type}.
  @param {*} value Thing {@link #Thing#value|value}.
  @returns {Thing}
  @throws {TypeError}
  @see {@link #is|is}, {@link #no|no}, {@link #Thing|Thing}
  @thing