func Clone[K comparable, V any](m map[K]V) map[K]V {
	mm := map[K]V{}
	for k, v := range m {
		mm[k] = v
	}
	return mm
}
Clone returns a copy of m.  This is a shallow clone:
the new keys and values are set using ordinary assignment.
package maps
func Keys[K comparable, V any](m map[K]V) []K {
	r := make([]K, 0, len(m))
	for k := range m {
		r = append(r, k)
	}
	return r
}
func Values[K comparable, V any](m map[K]V) []V {
	r := make([]V, 0, len(m))
	for _, v := range m {
		r = append(r, v)
	}
	return r
}
func Equal[K, V comparable](m1, m2 map[K]V) bool {
	if len(m1) != len(m2) {
		return false
	}
	for k, v1 := range m1 {
		if v2, ok := m2[k]; !ok || v1 != v2 {
			return false
		}
	}
	return true
}
func EqualFunc[K comparable, V1, V2 any](m1 map[K]V1, m2 map[K]V2, cmp func(V1, V2) bool) bool {
	if len(m1) != len(m2) {
		return false
	}
	for k, v1 := range m1 {
		if v2, ok := m2[k]; !ok || !cmp(v1, v2) {
			return false
		}
	}
	return true
}
func Clear[K comparable, V any](m map[K]V) {
	for k := range m {
		delete(m, k)
	}
}