code: func (g *Graph) Populate() error {
  	for _, o := range g.named {
  		if o.Complete {
  			continue
  		}
  
  		if err := g.populateExplicit(o); err != nil {
  			return err
  		}
  	}
  
  	// We append and modify our slice as we go along, so we don't use a standard
  	// range loop, and do a single pass thru each object in our graph.
  	i := 0
  	for {
  		if i == len(g.unnamed) {
  			break
  		}
  
  		o := g.unnamed[i]
  		i++
  
  		if o.Complete {
  			continue
  		}
  
  		if err := g.populateExplicit(o); err != nil {
  			return err
  		}
  	}
  
  	// A Second pass handles injecting Interface values to ensure we have created
  	// all concrete types first.
  	for _, o := range g.unnamed {
  		if o.Complete {
  			continue
  		}
  
  		if err := g.populateUnnamedInterface(o); err != nil {
  			return err
  		}
  	}
  
  	for _, o := range g.named {
  		if o.Complete {
  			continue
  		}
  
  		if err := g.populateUnnamedInterface(o); err != nil {
  			return err
  		}
  	}
  
  	return nil
  }
docs: // Populate the incomplete Objects.