Thats annoying. Really annoying. Thanks. Why cant dialyzer see that. And it works with :write so dialyzer is actually wrong …even if its correct about the types
btw i deleted the repo, but the original problem was in testcontainers for elixir, which is now totally free of both dialyzer warnings or dialyzer warning suppressions
That’s how types work everywhere. Type checkers complain if you pass something not meant to be handled, not if you pass something not able to be handled. Otherwise you couldn’t do anything like an match wildcard or an else statement of an if, because they might handle more cases than the explicitly expected ones.
defp create_tar_stream(file_name, file_contents) do
tar_file = "/tmp/#{file_name}.tar"
with :ok <-
:erl_tar.create(tar_file, [{String.to_charlist(file_name), file_contents}], [
:this_should_not_be_here,
:compressed
]),
{:ok, tar_file_contents} <- File.read(tar_file),
:ok <- File.rm(tar_file) do
{:ok, tar_file_contents}
end
end
end
This code works as well, but it’s definitely not correct… it just didn’t break.
If the typespec is a statement of intention, then Dialyzer was correct… if very, very unclear.
That’s what drives me crazy about Dialyzer… every time I though it was wrong, it turned out that I was: but Dialyzer was so opaque about what it was complaining about that figuring out the cure was often times worse than the disease.