package addrs // UniqueKey is an interface implemented by values that serve as unique map // keys for particular addresses. // // All implementations of UniqueKey are comparable and can thus be used as // map keys. Unique keys generated from different address types are always // distinct. All functionally-equivalent keys for the same address type // always compare equal, and likewise functionally-different values do not. type UniqueKey interface { uniqueKeySigil() } // UniqueKeyer is an interface implemented by types that can be represented // by a unique key. // // Some address types naturally comply with the expectations of a UniqueKey // and may thus be their own unique key type. However, address types that // are not naturally comparable can implement this interface by returning // proxy values. type UniqueKeyer interface { UniqueKey() UniqueKey } func Equivalent[T UniqueKeyer](a, b T) bool { return a.UniqueKey() == b.UniqueKey() }