code: func sliceTypeCheck(t Type, val reflect.Value) error {
  	if val.Kind() != reflect.Slice && val.Kind() != reflect.Array {
  		return typeErr(formatSliceString(t.Kind, t.Size), val.Type())
  	}
  
  	if t.T == ArrayTy && val.Len() != t.Size {
  		return typeErr(formatSliceString(t.Elem.Kind, t.Size), formatSliceString(val.Type().Elem().Kind(), val.Len()))
  	}
  
  	if t.Elem.T == SliceTy {
  		if val.Len() > 0 {
  			return sliceTypeCheck(*t.Elem, val.Index(0))
  		}
  	} else if t.Elem.T == ArrayTy {
  		return sliceTypeCheck(*t.Elem, val.Index(0))
  	}
  
  	if elemKind := val.Type().Elem().Kind(); elemKind != t.Elem.Kind {
  		return typeErr(formatSliceString(t.Elem.Kind, t.Size), val.Type())
  	}
  	return nil
  }
docs: // sliceTypeCheck checks that the given slice can by assigned to the reflection
  // type in t.