docs: function HAL_Link(rel, uri) {
  	var self = this;
  	
  	if(!(self instanceof HAL_Link)) {
  		return new HAL_Link(rel, uri);
  	}
  	
  	// 
  	if(rel instanceof HAL_Link) {
  		uri = rel;
  		rel = uri.rel;
  	}
  	
  	// uri is not an object
  	if(uri === undefined) {
  		throw new TypeError("uri required");
  	}
  	
  	// uri is not an object
  	if(typeof uri !== 'object') {
  		self.href = ''+uri;
  	} else {
  	
  		// Strings
  		['rel', 'href', 'hreflang', 'title'].filter(function(key) {
  			return uri.hasOwnProperty(key);
  		}).forEach(function(key) {
  			self[key] = ''+uri[key];
  		});
  		
  		// Mix-types
  		['name'].filter(function(key) {
  			return uri.hasOwnProperty(key);
  		}).forEach(function(key) {
  			self[key] = uri[key];
  		});
  		
  		// Booleans
  		['templated'].filter(function(key) {
  			return uri.hasOwnProperty(key) && (uri[key] === true);
  		}).forEach(function(key) {
  			self[key] = uri[key];
  		});
  	}
  	
  	if(rel) {
  		self.rel = rel;
  	}
  	
  }