code: func probablyEqualPageLists(a1 interface{}, a2 interface{}) bool {
  
  	if a1 == nil || a2 == nil {
  		return a1 == a2
  	}
  
  	t1 := reflect.TypeOf(a1)
  	t2 := reflect.TypeOf(a2)
  
  	if t1 != t2 {
  		return false
  	}
  
  	if g1, ok := a1.(PagesGroup); ok {
  		g2 := a2.(PagesGroup)
  		if len(g1) != len(g2) {
  			return false
  		}
  		if len(g1) == 0 {
  			return true
  		}
  		if g1.Len() != g2.Len() {
  			return false
  		}
  
  		return g1[0].Pages[0] == g2[0].Pages[0]
  	}
  
  	p1, err1 := ToPages(a1)
  	p2, err2 := ToPages(a2)
  
  	// probably the same wrong type
  	if err1 != nil && err2 != nil {
  		return true
  	}
  
  	if len(p1) != len(p2) {
  		return false
  	}
  
  	if len(p1) == 0 {
  		return true
  	}
  
  	return p1[0] == p2[0]
  }
docs: // probablyEqual checks page lists for probable equality.
  // It may return false positives.
  // The motivation behind this is to avoid potential costly reflect.DeepEqual
  // when "probably" is good enough.