code: func ValuesEqual(v1, v2 Value) bool {
  	switch v1 := v2.(type) {
  	case Document:
  		v2, ok := v2.(Document)
  		if !ok || len(v1) != len(v2) {
  			return false
  		}
  		for k, s1 := range v1 {
  			if s2, ok := v2[k]; !ok || !ValuesEqual(s1, s2) {
  				return false
  			}
  		}
  		return true
  	case Strings:
  		v2, ok := v2.(Strings)
  		if !ok || len(v1) != len(v2) {
  			return false
  		}
  		for i := range v1 {
  			if v1[i] != v2[i] {
  				return false
  			}
  		}
  		return true
  	case Bytes:
  		v2, ok := v2.(Bytes)
  		if !ok || len(v1) != len(v2) {
  			return false
  		}
  		return bytes.Equal(v1, v2)
  	case Time:
  		v2, ok := v2.(Time)
  		if !ok {
  			return false
  		}
  		return time.Time(v1).Equal(time.Time(v2))
  	}
  	return v1 == v2
  }
docs: // ValuesEqual returns true if values are strictly equal.