Анализирует ли Dialyzer анонимные функции?
В своем прогрессе в изучении эликсира, я играю с Dialyzer, чтобы добавлять типы в мои функции. В связи с этим я заметил, что Dialyzer, похоже, не проверяет типы для анонимных функций.
В приведенном ниже примере я передаю анонимную функцию, которая добавляет два числа и возвращает число (t::number -> number)
в all?
функция. Таким образом, я не возвращаю логическое значение, как обещано в all?
спекуляция (t::any -> boolean)
,
defmodule Exercises do
@spec all?([t::any], (t::any -> boolean)) :: boolean
def all?([], _), do: true
def all?([h|t], con) do
if con.(h) do
all?(t,con)
else
false
end
end
@spec funski() :: boolean
def funski() do
all?([1,1,2], &(&1 + 1))
end
end
Похоже, что Dialyzer не сообщает о каких-либо ошибках или предупреждениях для этого кода, и мне любопытно, если Dialyzer не может проверить ошибки такого рода или я что-то не так делаю.
1 ответ
Кажется, это ошибка диализатора. призвание :lists.all/2
(с заменой аргументов) выдает правильное предупреждение, но по какой-то причине вызывает ваш локальный all?/2
Функция с той же спецификацией не имеет.