Нет, лучшего способа нет.Поведения никоим образом не индексируются, так как они являются функцией времени компиляции, используемой для проверки того, что все необходимые функции обратного вызова были определены.Так что-то вроде этого так хорошо, как это получается:
for {module, _} <- :code.all_loaded(),
X in (module.module_info(:attributes)[:behaviour] || []) do
module
end