Metarole for type stashes
Warning: this role is part of the Rakudo implementation, and is not a part of the language specification.
Types may have a stash associated with them, which is a named hash containing our-scoped symbols for that type's package. When this is the case, they can be used like namespaces; you can get their stash using their
WHO property or with the
:: dispatch operator:
say Nested::Namespace::Symbol; # OUTPUT: «(Namespace)␤»say Nested.WHO<Namespace>.WHO<Symbol>; # OUTPUT: «(Namespace)␤»
Metamodel::Stashing is the metarole that handles creating and setting a stash object for types. Types used with this metarole are expected to support naming, so when writing custom HOWs that do it, ensure they also do Metamodel::Naming.
Creates and sets a stash for a type, returning
This method is typically called as the last step of creating a new type. For example, this is how it would be used in a minimal HOW that only supports naming and stashing:
does Metamodel::Namingdoes Metamodel::Stashingmy Mu constant WithStash = WithStashHOW.new_type: :name<WithStash>;say WithStash.WHO; # OUTPUT: «WithStash␤»