code: func (ns *Namespace) Delimit(seq, delimiter interface{}, last ...interface{}) (template.HTML, error) {
  	d, err := cast.ToStringE(delimiter)
  	if err != nil {
  		return "", err
  	}
  
  	var dLast *string
  	if len(last) > 0 {
  		l := last[0]
  		dStr, err := cast.ToStringE(l)
  		if err != nil {
  			dLast = nil
  		}
  		dLast = &dStr
  	}
  
  	seqv := reflect.ValueOf(seq)
  	seqv, isNil := indirect(seqv)
  	if isNil {
  		return "", errors.New("can't iterate over a nil value")
  	}
  
  	var str string
  	switch seqv.Kind() {
  	case reflect.Map:
  		sortSeq, err := ns.Sort(seq)
  		if err != nil {
  			return "", err
  		}
  		seqv = reflect.ValueOf(sortSeq)
  		fallthrough
  	case reflect.Array, reflect.Slice, reflect.String:
  		for i := 0; i < seqv.Len(); i++ {
  			val := seqv.Index(i).Interface()
  			valStr, err := cast.ToStringE(val)
  			if err != nil {
  				continue
  			}
  			switch {
  			case i == seqv.Len()-2 && dLast != nil:
  				str += valStr + *dLast
  			case i == seqv.Len()-1:
  				str += valStr
  			default:
  				str += valStr + d
  			}
  		}
  
  	default:
  		return "", fmt.Errorf("can't iterate over %v", seq)
  	}
  
  	return template.HTML(str), nil
  }
docs: // Delimit takes a given sequence and returns a delimited HTML string.
  // If last is passed to the function, it will be used as the final delimiter.