From this question in StackOverflow, I discovered Type.^roles, which includes all roles that are composed into a type. It works all over the place, but it fails to print if there are NQP roles somewhere:

say Cursor.^roles# OUTPUT: «No such method 'gist' for invocant of type 'NQPMatchRole'. Did you mean 'ast'?␤ in block <unit> ␤␤»