class NQPMu {
    method CREATE() {
        pir::repr_instance_of__PP(self)
    }

    method new() {
        self.CREATE()
    }

    proto method Str() { * }
    multi method Str(Mu:U $self:) {
        self.HOW.name(self) ~ '()'
    }

    proto method ACCEPTS($topic) { * }
    multi method ACCEPTS(NQPMu:U $self: $topic) {
        pir::type_check__IPP($topic, self.WHAT)
    }

    method isa($type) {
        self.HOW.isa(self, $type)
    }

}

class NQPMu {
    method CREATE() {
        pir::repr_instance_of__PP(self)
    }

    method new() {
        self.CREATE()
    }

    proto method Str() is parrot_vtable('get_string') { * }
    multi method Str(Mu:U $self:) {
        self.HOW.name(self) ~ '()'
    }

    proto method ACCEPTS($topic) { * }
    multi method ACCEPTS(NQPMu:U $self: $topic) {
        pir::type_check__IPP($topic, self.WHAT)
    }

    method isa($type) {
        self.HOW.isa(self, $type)
    }

}

Mark the Str proto as also being the parrot_vtable handler for get_string. This means say(SomeTypeObj) works.
Mark the Str proto as also being the parrot_vtable handler for get_string. This means say(SomeTypeObj) works.
