The question is more about why You need to use & than function arity.
Probably because
is_number(x)
has the same result as
fn x -> is_number(x) end
and You might wonder why wrapping this inside fn → end.
But as soon as there is more than one params… You see it starts to be clearer why the 2 forms are differents.
There is another reason, fn allows to capture the present value of variables in the scope (Closure).
iex> a = 2
2
iex> myfunc = fn x -> a * x end
#Function<6.127694169/1 in :erl_eval.expr/5>
iex> a = 3
3
iex> Enum.map([1, 2], &myfunc.(&1))
[2, 4]
This last example is like having
fn x -> fn x -> a * x end end
It’s really fun to create functions from other functions so easily ![]()


















