Dialyzer detects error in this code (type mismatch):
defmodule Foo do
@type options() :: [
{:k1, integer()}
| {:k2, boolean()}
]
@spec foo(options()) :: options()
def foo(a), do: a
def bar() do
# error
foo(k2: 10)
end
end
but doesn’t in this code:
defmodule Foo do
@type options() :: [
{:k1, integer()}
| {:k2, integer()}
| {:k3, integer()}
| {:k4, integer()}
| {:k5, integer()}
| {:k6, boolean()}
]
@spec foo(options()) :: options()
def foo(a), do: a
def bar() do
# error
foo(k6: 10)
end
end
Why?