FWIW, distinguishing situations like:
@spec function(integer) :: atom
@spec function(atom) :: integer
and:
@spec function(integer) :: integer
@spec function(atom) :: atom
(both of which Dialyzer collapses to @spec function(integer | atom) :: integer | atom) is a key motivation for the set-theoretic type work:






















