diff --git a/doc/reference/std/misc/rtd.md b/doc/reference/std/misc/rtd.md index 31e9c907c9..746c0bf7a9 100644 --- a/doc/reference/std/misc/rtd.md +++ b/doc/reference/std/misc/rtd.md @@ -71,6 +71,34 @@ type object. ``` ::: +## type=? +``` scheme +(type=? typ1 type2) -> bool + + typ1 := type object + typ2 := other type object +``` + +Returns true if the two type objects have the same `type-id`. +This is the preferred equality predicate for types. +`eq?` and `eqv?` should also work, but at present +`equal?` seems to be broken. + +::: tip Examples: +``` scheme +> (defstruct a ()) +> (defclass b ()) +> (type-id a::t) +#:a::t45 +> (type-id b::t) +#:b::t49 +> (type=? a::t a::t) +#t +> (type=? a::t b::t) +#f +``` +::: + ## type-name ``` scheme (type-name typ) -> type name | error diff --git a/src/std/misc/rtd.ss b/src/std/misc/rtd.ss index 72f528d316..83b3c465bb 100644 --- a/src/std/misc/rtd.ss +++ b/src/std/misc/rtd.ss @@ -3,7 +3,7 @@ ;;; safe type descriptor accessors (import :std/error) (export (rename: checked-object-type object-type) - type? type-id type-name type-super + type? type=? type-id type-name type-super type-descriptor? (rename: checked-type-descriptor-mixin type-descriptor-mixin) (rename: checked-type-descriptor-fields type-descriptor-fields) @@ -52,3 +52,6 @@ (defcheck-type-descriptor checked-type-descriptor-ctor type-descriptor-ctor) (defcheck-type-descriptor checked-type-descriptor-slots type-descriptor-slots) (defcheck-type-descriptor checked-type-descriptor-methods type-descriptor-methods) + +(def (type=? x y) + (eq? (type-id x) (type-id y)))