func (k *Kind) Is(err error) bool {
	if err == nil {
		return false
	}
	e, ok := err.(*Error)
	if !ok {
		return false
	}
	if k == e.kind {
		return true
	}
	if e.cause == nil {
		return false
	}
	return k.Is(e.cause)
}
Is checks if the given error or any of its children are of this Kind
package errors
import (
	"fmt"
	"io"
)
type Kind struct {
	Message string
}
func NewKind(msg string) *Kind {
	return &Kind{Message: msg}
}
func (k *Kind) New(values ...interface{}) *Error {
	return &Error{
		kind:    k,
		message: fmt.Sprintf(k.Message, values...),
		stack:   NewStackTrace(1),
	}
}
func (k *Kind) Wrap(cause error, values ...interface{}) *Error {
	return &Error{
		kind:    k,
		cause:   cause,
		message: fmt.Sprintf(k.Message, values...) + ": %s",
		stack:   NewStackTrace(1),
	}
}