Type is the type of the def s, if s is not itself a type. If s is itself a type, then Type returns its underlying type.


TYPE OF s          RESULT
------------   -----------------------------------------------------------------
named type     the named type's name
primitive      the primitive's name
function       `(arg1, arg2, ..., argN)` with language-specific type annotations
package        empty
anon. type     the leading keyword (or similar) of the anonymous type definition

These rules are not strictly defined or enforced. Language toolchains should freely bend the rules (after noting important exceptions here) to produce sensible output.