code: function decorator(fn) {
  	return opt => (
  		typeof opt==='function' ? fn(opt) : (target, key, desc) => {
  			desc.value = fn(desc.value, opt, target, key, desc);
  		}
  	);
  }
docs: Returns function supports the forms:
  deco(target, key, desc) -> decorate a method
  deco(Fn) -> call the decorator proxy on a function