Elixir 1.17 changelog states:
At the moment, Elixir developers will interact with set-theoretic types only through warnings found by the type system
I’ve compiled several old projects with Elixir 1.17 and OTP26 and I’ve found no warnings. I thought that I was doing something wrong and I’ve tried writing checking examples from the doc and still got no errors
$ elixir --version
Erlang/OTP 26 [erts-14.2.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns]
Elixir 1.17.1 (compiled with Erlang/OTP 26)
$ cat lib/xxx.ex
defmodule Xxx do
# Performing structural comparisons between non-overlapping types, such as integer >= string
def one(x) when is_binary(x) do
if 1 >= x do
1
else
2
end
end
# Performing structural comparisons with structs, such as my_date < ~D[2010-04-17]
def two(dt = %DateTime{}) do
if two_compare(dt, DateTime.utc_now()) do
1
else
2
end
end
def two_compare(x, y) do
x < y
end
# Accessing a key on a map or a struct that does not have the given key, such as user.adress
def three(dt = %MapSet{}) do
if three_get_field(dt) do
1
else
2
end
end
def three_get_field(x) do
x.not_present_field
end
end
$ mix compile --force --warnings-as-errors
Compiling 1 file (.ex)
Generated xxx app
Is there any compiler option I am missing or anything like this? How can I make new type system work?