code: func NewPCPInstanceDomain(name string, instances []string, desc ...string) (*PCPInstanceDomain, error) {
  	if name == "" {
  		return nil, errors.New("Instance Domain name cannot be empty")
  	}
  
  	if len(desc) > 2 {
  		return nil, errors.New("Only 2 description strings allowed to define an instance domain")
  	}
  
  	shortDescription, longDescription := "", ""
  
  	if len(desc) > 0 {
  		shortDescription = desc[0]
  	}
  
  	if len(desc) > 1 {
  		longDescription = desc[1]
  	}
  
  	imap := make(map[string]*pcpInstance)
  
  	for _, instance := range instances {
  		if len(instance) > StringLength {
  			return nil, errors.Errorf("instance name %v is too long", instance)
  		}
  
  		imap[instance] = newpcpInstance(instance)
  	}
  
  	return &PCPInstanceDomain{
  		id:               hash(name, PCPInstanceDomainBitLength),
  		name:             name,
  		instances:        imap,
  		shortDescription: shortDescription,
  		longDescription:  longDescription,
  	}, nil
  }
docs: // NewPCPInstanceDomain creates a new instance domain or returns an already created one for the passed name
  // NOTE: this is different from parfait's idea of generating ids for InstanceDomains
  // We simply generate a unique 32 bit hash for an instance domain name, and if it has not
  // already been created, we create it, otherwise we return the already created version