In the source code I find this pattern repeated over and over.
As an example, in the elixir-1.5.3/lib/elixir/lib/enum.ex I find:
@spec reduce(t, acc, reducer) :: result
def reduce(enumerable, acc, fun)
The “def reduce…” has no “do” block. Almost all specs in this
file follow this pattern. Some do not.
Is this a “template” of some sort?
I’ve looked but can’t find an explanation.
What is this pattern called?
What changes when a spec has this and some specs do not?
Is this “def” without a “do” related to a “spec” at all? If not,
then what does this syntax provide?


















