Erlang has philosophy of no surprises and parameterized modules could be quite surprising.
1. When debugging parameterized module, Erlgang was reporting function/arity+1, because internally,
parametrized modules are just functions with one more parameter.
2. For the same reason, you would have problems invoking those functions in shell.
You can achieve the same things, passing the state as a first parameter.
It is more readable and easier to test and debug.
If you REALLY need them (usually, you don’t) or you want to keep backward compatibility,
you can emulate them with parse transforms.
Chicago Boss team did exactly that: