Допустим, у меня есть такая функция:
def something(callback) do
case *some condition* do
0 ->
:ok
1 ->
{:error, :foo}
_ ->
callback.()
end
end
, где функция обратного вызова может возвращать либо :ok
, либо {:error, *some atom*}
, где некоторый атом - неизвестный атом.
Теперь мне интересно, есть ли способ написать спецификацию для функции something/1
, которая не использует общую спецификацию atom
.Таким образом, вопрос, в основном, заключается в том, есть ли способ написать более конкретную спецификацию типов, чем эта:
@spec something(() -> :ok | {:error, atom}) :: :ok | {:error, atom}
Вместо этого я хотел бы, чтобы моя спецификация показывала, что функция something/1
может возвращать :ok
, {:error, :foo}
или значение, возвращаемое callback
PS Я знаю, что такого рода вещи не имеют значения на практическом уровне, поэтому это просто вопрос, основанный на любопытстве.