// Copyright (c) 2024-2026 Celestino Amoroso (celestino.amoroso@gmail.com).
// All rights reserved.

// equaler.go
package kern

type Equaler interface {
	EqualTo(other Equaler) bool
}

func IsEqualer(v any) (ok bool) {
	_, ok = v.(Equaler)
	return
}

func Equal(a, b any) (equal bool) {
	if IsEqualer(a) && IsEqualer(b) {
		equal = a.(Equaler).EqualTo(b.(Equaler))
	} else {
		equal = a == b
	}
	return
}
