Я пишу небольшую службу erlang и хочу наложить ограничения на свои типы.
Я обнаружил функциональность -spec , и мне кажется, что это способ «привязать» сигнатуры функций к определенным типам.
Моим примером может быть такая функция, как:
fib(N) when N < 3 ->
1;
fib(N) ->
fib(N-1) + fib(N-2).
добавление строки
-spec fib_cps(pos_integer()) -> pos_integer().
должно гарантировать, что метод, по крайней мере, возвращает правильный тип, но, похоже, это не так ..
для Если я изменю function to:
fib(N) when N < 3 ->
ok;
fib(N) ->
not_ok.
код по-прежнему компилируется, исправно и даже выполняется.
Что я неправильно понимаю?