package slice func ContainsCompare[T any](haystack []T, needle T, equal func(a, b T) bool) bool { for _, hay := range haystack { if equal(needle, hay) { return true } } return false } func Contains[T comparable](haystack []T, needle T) bool { return ContainsCompare(haystack, needle, func(a, b T) bool { return a == b }) } // Overlap returns if the 2 sets have any overlap (element(s) in common) func Overlap[T comparable](a []T, b []T) bool { return OverlapCompare(a, b, func(a, b T) bool { return a == b }) } func OverlapCompare[T any](a []T, b []T, equal func(a, b T) bool) bool { // For each element in b, if at least 1 is contained in 'a', // return true. for _, element := range b { if ContainsCompare(a, element, equal) { return true } } return false }