Por que existem dois tipos de funções no Elixir?
Estou aprendendo Elixir e me pergunto por que ele tem dois tipos de definições de função:
funções definidas em um módulo comdef
chamado usandomyfunction(param1, param2)
funções anônimas definidas comfn
chamado usandomyfn.(param1, param2)
Somente o segundo tipo de função parece ser um objeto de primeira classe e pode ser passado como um parâmetro para outras funções. Uma função definida em um módulo precisa ser envolvida em umfn
. Há algum açúcar sintático que pareceotherfunction(myfunction(&1, &2))
a fim de tornar isso fácil, mas por que é necessário em primeiro lugar? Por que não podemos apenas fazerotherfunction(myfunction))
? É apenas para permitir a chamada de funções do módulo sem parênteses como em Ruby? Parece ter herdado essa característica de Erlang, que também tem funções de módulo e divertimentos, então na verdade vem de como a VM Erlang trabalha internamente?
Existe algum benefício em ter dois tipos de funções e converter de um tipo para outro, a fim de passá-los para outras funções? Existe um benefício com duas notações diferentes para chamar funções?