Asd
How do I make the new type system work?
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?
First Post!
LostKobrakai
Where you get no warnings it’s not that you’re missing something, but the type system is not yet handling those cases. E.g. your Xxx.one(…) doesn’t cause a warning, but the following does:
x = "abc"
if 1 >= x do
1
else
2
end
Elixir 1.17 doesn’t suddently have a feature complete type system in the background, but it only started to integrate what a typesystem can do.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex









