leaner and cleaner `role?` implementation